nginx 转发https后网址变成https://localhost
题目来源及自己的思路
我的需求是将80访问转发到https访问
没有在nginx.conf中配置主机配置,通过default.conf与其他配置文件实现,一个网站一个配置文件
相关代码
下面是default.conf的配置内容
server {
listen 80;
server_name localhost; #这里写域名
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl default_server;
server_name localhost;
ssl_certificate /etc/nginx/SSL/baidu.top.crt;#证书存放位置,注意这里是Docker容器镜像中的路径,不是宿主机的
ssl_certificate_key /etc/nginx/SSL/baidu.top.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
下面是网站本身的独立配置文件
server {
listen 443;#监听端口为443,
server_name wiki.baidu.top; #这里写域名
location / {
proxy_pass http://localhost:7008;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header x-wiz-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
我头秃了
问题已经解决,最终是用如下解决的return 301 https://$host$request_uri;
而不是用return 301 https://$server_name$request_uri;
我没搞明白这是为什么
http 和 https 访问有很大不同,不要用
proxy
代理,直接 301 跳转就好了。你把 https 访问配置好,然后 http 用下面的配置跳转。