使用 NGINX 将 HTTP 重定向到 HTTPS

Redirect HTTP to HTTPS with NGINX

我在工作中维护了几个应用程序,我注意到一些员工能够使用非安全路径访问这些应用程序,例如:example.com, www.example.com。使用其中任何一个路径都会将它们定向到 HTTP 路径而不是 HTTPS,除非它们在 url 中指定 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...
    }

我尝试在 listen 80 部分做 return 但这没有用:

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

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

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

你错过了最后的分号,你也应该去掉 proxy_pass 因为它会覆盖行为。

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

    location / {
        return 301 https://$host$request_uri;
    }
}