无法在 NGINX 上将 HTTP 重定向到 HTTPS

无法在 NGINX 上将 HTTP 重定向到 HTTPS

几天来我一直在尝试在 NGINX 上配置 SSL 证书,我成功了,但尝试了不同的方法将 HTTP 流量重定向到 HTTPS,我尝试的所有配置都失败了,我复制了下面的配置文件(或剩下的部分)给别人看,当我输入时 SSL 正在工作https://example.com,但我无法让它在输入 www.example.com 时工作,一直收到错误 404 无法将流量重定向到 https,我注释了 SSL 行,这样我就可以保持我的网站在端口 80 上运行,直到我弄清楚为止,任何帮助都将不胜感激,谢谢

#include /etc/nginx/blockuseragents.rules;
#        server {
#        if ($blockedagent) {
#               return 403;
#        }
#        if ($request_method !~ ^(GET|HEAD|POST)$) {
#        return 444;
#        }
#        listen [::]:80;
#        listen 80;
#        server_name example.com www.example.com;
#
#
#       listen [::]:443 ssl http2;
#       listen 443 ssl http2;
#        server_name www.example.com;
#
#         ssl off;
# SSL configuration
#        #
#        ssl_prefer_server_ciphers  on;
#        ssl_ciphers  'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
#        ssl_certificate  /etc/nginx/ssl/file.crt;
#        ssl_certificate_key  /etc/nginx/ssl/server.key;
#        server_name www.example.com;
#
#        root "/var/www/example.com/html/web";
#        index index.html index.htm index.php;
#        charset utf-8;

        location / {
        try_files $uri $uri/ /index.php?$args;
        }
        location @rewrite {
        rewrite ^/(.*)$ /index.php?r=$1;
        }

答案1

您需要在配置中为要服务的每个站点设置单独的服务器 {} 部分,并且考虑到您希望根据用户是否到达而采取不同的行为http:https:必须将这些行为定义为单独的服务器 {} 部分。

在其中一个中,您将监听端口 80,在另一个中,您将监听端口 443 并启用 ssl 和 http2。

在侦听端口 80 的程序中,您唯一要在该部分声明的是重定向到相同的 URL,但带有https:

在我的网站上,这些重定向存根如下所示:

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

        server_name some.example.com;

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

相关内容