状况描述:
二级域名ng映射A记录到ip地址,三级域名*.ng映射到CNAME ng.demo.cn
nginx通过引入在conf.d/*.conf 加载配置文件,其中2个配置文件
第一个:
server {
listen 80;
server_name login.demo.cn;
charset utf-8;
location / {
index login;
proxy_pass http://127.0.0.1:8080;
}
}
第二个(ngrok开发配置):
upstream ngrok {
server 127.0.0.1:5080;
keepalive 64;
}
server {
listen 80;
server_name ×.ng.demo.cn;
location / {
proxy_pass http://ngrok;
proxy_redirect off;
proxy_set_header Host $http_host:5080;
#proxy_set_header Host $host:5080;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 1;
proxy_send_timeout 120;
proxy_read_timeout 120;
}
}
~
每次跳转一个不存在的路径时路径不变,添加login路径,内容是login.demo.cn/login路径中的内容:
如我请求xx.ng.demo.cn,浏览器地址栏是xx.ng.demo.cn/login,但内容是login.demo.cn/login的内容。
解决办法:
在第一个配置文件中添加
server {
listen 80;
server_name localhost;
}
完整的配置文件
server {
listen 80;
server_name localhost;
}
server {
listen 80;
server_name login.demo.cn;
charset utf-8;
location / {
index login;
proxy_pass http://127.0.0.1:8080;
}
}
原因:nginx站点没有绑定域名的情况下,会自动跳转到nginx的默认站点,默认站点是从上到下的匹配的第一个server节,而第一个节就是绑定的login.demo.cn这个域名。所以会跳转到默认站点。而配置了localhost以后它是第一个即默认站点了。
然后nginx -s reload 发现规则生效了.再次访问不存在的路径就是404错误了