![无法在 NGINX 上将 HTTP 重定向到 HTTPS](https://linux22.com/image/1155285/%E6%97%A0%E6%B3%95%E5%9C%A8%20NGINX%20%E4%B8%8A%E5%B0%86%20HTTP%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20HTTPS.png)
几天来我一直在尝试在 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;
}