nginx config - 将http转发到https,将www.domain.tld转发到domain.tld和两个子域

时间:2014-08-05 20:38:19

标签: node.js angularjs ubuntu nginx

我正在尝试将nginx配置为:

http://www.domain.tld --> https://domain.tld
http://domain.tld --> https://domain.tld
http://api.domain.tld --> https://api.domain.tld

'www'-webroot提供静态HTML(AngularJS),API提供应该从localhost:3000“上游”的Node.JS应用程序。我想我的方向正确,但它似乎对我不起作用。这是我到目前为止所得到的:

upstream api_server {
    server              localhost:3000;
    keepalive           64;
}

server {
    listen 80;
    server_name         api.domain.tld;
    return 301          https://api.domain.tld$request_uri;
}

server {
    listen 80;
    server_name         *.domain.tld www.domain.tld;
    return 301          https://domain.tld$request_uri;
}

server {
    listen 443 ssl;
    server_name         api.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

location / {
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    Host $http_host;
    proxy_set_header    X-NginX-Proxy true;

    proxy_pass          http://api_server/;
    proxy_redirect      off;
}

server {
    listen 443 ssl;
    server_name         *.domain.tld www.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root /var/www/webroot/;
}

现在这都在我的/etc/nginx/conf.d/domain.tld.conf文件中。

非常感谢任何帮助。

<小时/> 的 编辑:

我自己已经弄明白了(Tan Hong Tat的一些帮助),所以示例已更新。

如果您有任何改进,请告诉我,我会更新。

1 个答案:

答案 0 :(得分:1)

在HTTP的服务器块中将HTTP重定向到HTTPS。删除HTTPS服务器块中的listen 80

    server {
        listen 80;
        server_name         domain.tld www.domain.tld;
        return 301          https://domain.tld$request_uri;
    }
    server {
        listen 80;
        server_name         api.domain.tld;
        return 301          https://api.domain.tld$request_uri;
    }

    server {
        listen 443 ssl;
        server_name         domain.tld www.domain.tld api.domain.tld;

        location / {
            proxy_redirect off;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_set_header        Host $http_host;
            proxy_set_header        X-NginX-Proxy true;
            proxy_set_header        Connection "";
            proxy_http_version      1.1;
            proxy_cache             one;
            proxy_cache_key         sfs$request_uri$scheme;
            proxy_pass              http://domain_tld_api_server;
        }
    }