使用 NGINX 将 HTTP 重定向到 HTTPS

Mic*_*ael 0 nginx nginx-config

我在工作中维护了几个应用程序,并注意到一些员工能够使用这些应用程序的非安全路径,例如:example.com, www.example.com。使用这些路径中的任何一个都会将它们定向到该HTTP路径而不是,除非它们在 url 中HTTPS指定。HTTPS我们目前使用nginx作为我们的网关,但我没有对我们的进行初始配置nginx gateway,所以我真的不知道什么有效,什么无效。

这是我们的 nginx.conf 文件的片段

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

        location / {
            proxy_pass http://localhost:3000;
        }
}

# Settings for a TLS enabled server.

    server {
        listen      443 ssl http2 default_server;
        listen      [::]:443 ssl http2 default_server;
        server_name     localhost;

        ssl_certificate "/etc/nginx/ssl/domain-crt.txt";
        ssl_certificate_key "/etc/nginx/ssl/domain-key.txt";
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

        ## More configuration below this...
    }

Run Code Online (Sandbox Code Playgroud)

我尝试在 Listen 80 部分中进行返回,但这不起作用:

server{
        listen  80 default_server;
        listen  [::]:80 default_server;
        server_name localhost;
        return 301 https://$host$request_uri;

        location / {
            proxy_pass http://localhost:3000;
        }
}

Run Code Online (Sandbox Code Playgroud)

我重新加载了nginx更正,但仍然能够连接到http路径,而无需重定向到https. 我不知道这是否与 server_name 有关,localhost因为我只在网上看到了它们重定向到实际域名的示例,但这就是我们的应用程序的设置方式,我不知道是否要更改它将对我们应用程序的连接产生影响。如果有人对我如何使重定向正常工作有任何想法或建议,那就太好了。谢谢!

fly*_*lyx 5

你缺少最后的分号,你也应该摆脱 proxy_pass 因为它会覆盖行为。

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

    location / {
        return 301 https://$host$request_uri;
    }
}
Run Code Online (Sandbox Code Playgroud)