如何从http配置nginx到https

时间:2016-11-09 15:33:27

标签: node.js ubuntu nginx

我有一个Ubuntu Node.js服务器与我的http://www.example.com网站一起工作。 我使用httpx:// localhost:3000进行测试,然后当我将其部署到Ubuntu时, 我仍然需要进入端口(www.example.com:3000)。我被告知要实施一个 反向代理删除端口3000要求。我安装了nginx并添加了 以下: sudo nano / etc / nginx / sites-available / default ----------删除所有复制/粘贴--------------------------

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://67.205.128.21:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这有效,并删除了进入端口3000的要求。 然后我发现我需要使用SSL /证书运行我的应用程序。 我能够进行nginx更改以使其工作为https://www.example.com:3000。 但现在我需要摆脱端口3000的要求。 我尝试了我用于http:的相同反向代理设置,但是没有用。 如何配置nginx以删除端口3000要求。 以下是我在浏览器中输入时的情况:

http://67.205.128.21    - Works
http://example.com  - Redirects to  https://example ; Error: Redirects too many times
http://www.example.com  - Redirects to  https://example ; Error: Redirects too many times
http://example.com:3000 - Works
http://www.example.com:3000 - Works

当前的nginx配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
    location ~ /.well-known {
            allow all;
    }
    # SSL configuration
    #
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
server_name example.com;
    location / {
    proxy_pass http://67.205.128.21:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
}

1 个答案:

答案 0 :(得分:0)

这应该有效:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name example.com www.example.com;

    return 301 https://$server_name$request_uri;

    location ~ /.well-known {
        allow all;
    }
}

然后,在同一文件或不同文件中,添加一个额外的服务器块。

# SSL configuration
#
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    server_name example.com;

    location / {
        proxy_pass http://67.205.128.21:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

我认为问题在于您只有一个server块,因此当执行重定向时,它会落入同一个服务器块中,然后再次重定向。