最近遇到了一个奇怪的问题,Nginx上代理多个项目,其中一个配置ssl,其他项目如果用https访问,也会跳转到这个配置了ssl的虚拟主机上。虽然找到了解决方法,但是没有搞清楚是什么原因,明明监听443的server也加了指定的server_name,如果有清晰的大佬,虚心接受指导。
具体的解决方案是,在没有配置ssl的server里,加上rewrite跳转,如果用443访问,自动转到80,代码如下:
server {
listen 80;
#关键代码
listen 443 ssl;
server_name test;
#关键代码
ssl_certificate /etc/nginx/cert/server.pem;#这里的pem和key可以随便指定一个,不然会报错
ssl_certificate_key /etc/nginx/cert/server.key;
#关键代码
if ($server_port ~ 443){
rewrite ^(/.*)$ http://$host$1 permanent;
}
location / {
proxy_pass http://127.0.0.1:8180;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
添加上关键代码,然后重启nginx就可以了。