nginx:如何在代理请求中将 http 重定向到 https?

nginx:如何在代理请求中将 http 重定向到 https?

我有以下服务器块:

server {

    listen 192.0.2.1:443 ssl;
    listen 192.0.2.1:80;
    server_name support.example.com;
    ssl_certificate           /etc/ssl/certs/support.example.com/fullchain.pem;
    ssl_certificate_key       /etc/ssl/private/support.example.com/privkey.pem;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    add_header Content-Security-Policy "frame-ancestors 'self' cloud.example.com example.com";
    access_log            /var/log/nginx/support.log;

    location / {
      proxy_set_header        Host $host;
      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_pass          https://support.example.com;
      proxy_read_timeout  90;
    }
     location ~ .well-known {

             root /srv/web;
    }
}

我希望除了location ~ .well-known重定向到 https 之外的每个请求,我尝试使用重定向指令,但没有成功。我希望每次客户端请求非 http 请求时都重定向到https://support.example.com

笔记:我想避免为非 http 请求创建新的虚拟服务器。

答案1

下面的服务器块将捕获对 support.example.com 的 http 请求并重定向到 https。

笔记:修改配置文件之前总是进行备份。如果出现问题,您可以更轻松地回滚。

server {
    listen 192.168.0.100:80;
    server_name support.example.com
    return 301 https://support.example.com$request_uri;
}

下面将捕获从 www.support.example.com 到 https support.example.com 的 http 和 https 请求。虽然在使用子域(如您的示例)时这并不重要,但当您希望将 www.example.com 定向到 example.com 时它很有用。我在这里只包括它,因为它可能对您或其他人有用。

server {
    listen 192.168.0.100:80;
    listen 192.168.0.100:443 ssl;
    server_name www.example.com;

    # SSL Certs stuff for www.example.com goes here

    return 301 https://example.com$request_uri;
}

一旦您捕获了所有请求,您就可以按照通常的方式进行处理。

server {
    listen 192.168.0.100:443 ssl;
    server_name example.com;

    # SSL Stuff and other requirements go here

}

以上三项都可以放入 /etc/nginx/sites-available/example.com.conf

进行更改后,Nginx 可以使用以下命令检查您的修改。

sudo nginx -t

You should get the following output;

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

您可以使用以下方式重新加载 Nginx-s 重新加载

sudo nginx -s reload

我希望这就是你所寻找的。

相关内容