[求助] 关于 nginx 配置的问题,请教诸位大佬

2018-08-05 20:15:01 +08:00
 zty7723271

明明看上去好像没有错,可为啥不生效呢?琢磨了很久

3045 次点击
所在节点    NGINX
19 条回复
zty7723271
2018-08-05 20:15:53 +08:00
server 部分的配置代码如下:

server{
listen 80;
server_name test;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088/gg;
# proxy_redirect off;
}
}
jdlau
2018-08-05 20:17:00 +08:00
nginx -t 看看
qcloud
2018-08-05 20:19:21 +08:00
svrver name 不对吧
zty7723271
2018-08-05 20:21:09 +08:00
以上的代码有错吗?(好像没有对吧)
但是:
1.当我访问 http://118.24.117.188 的时候,可以显示 welcome to nginx,
却不能显示我跑在 http://118.24.117.188:8088/gg 的 springboot 404 页面

2.http://118.24.117.188:8088/gg/index 是一个 @RestController,会一句测试字符串返回
然而当我访问 http://118.24.117.188/index 的时候缺失 404
newghost
2018-08-05 20:21:27 +08:00
server name 应该是域名吧? 加个 default 对所有起作用?
isCyan
2018-08-05 20:22:13 +08:00
路径不对是吧,location 里面加一条
rewrite ^(.*)$ /gg$1 break;
然后把 proxy_pass 的 /gg 去掉试试
zty7723271
2018-08-05 20:22:53 +08:00
@qcloud 我改改试试
@jdlau nginx -t 结果 successed
isCyan
2018-08-05 20:23:01 +08:00
@qcloud
@newghost 只有一个 server 的时候什么域名都是一样的。除非设另外一个 default server
coffeSlider
2018-08-05 20:24:10 +08:00
你不用 servername 却用 ip 请求,自然走不到你这个 server。
zty7723271
2018-08-05 20:27:16 +08:00
server{
listen 80;
server_name default 118.24.117.188;
location / {
rewrite ^(.*)$ /gg$1 break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088;
# proxy_redirect off;
}
}


解决了,感谢各位大佬!!
@isCyan
@newghost
isCyan
2018-08-05 20:29:03 +08:00
@zty7723271 这是一个非常常见的新手错误……
nginx proxy pass 不会发送你写在后面的 path 的,只会发送当前实际 path
不然就要 rewrite
你可以看一下 proxy_pass 的文档
或者搜索 nginx proxy_pass rewrite
zty7723271
2018-08-05 20:29:05 +08:00
总结:确实是域名问题
isCyan
2018-08-05 20:32:00 +08:00
default server 的命令不是这样的,是在 listen 后面加 default_server。
如果你要 ip 访问的话,只要监听到了 ip,ip 访问到的就是 default_server 了,不需要单独配置。不然 ip 换了还要改配置。、
而且注意在网上发言不要泄露服务器 ip,防止被 ddcc ( V2EX 不能删贴)
isCyan
2018-08-05 20:32:50 +08:00
你要是不 rewrite 即使域名对了也是一样 404/500
zty7723271
2018-08-05 20:35:11 +08:00
@isCyan 原来如此,我刚才试了下注释掉 rewrite (但是 proxy_pass 后面的 /gg 没有加上),可以访问。正如你所说的不会跳转到后面的 path。

然后又试了一下加上 /gg,结果不能访问


然而,server_name 也确实有问题,还是要设置 ip 域名的(我又试了把 server_name 改回之前的“ test ”,结果不行)。所以 server_name 确实要设置 ip 域名
zty7723271
2018-08-05 21:15:55 +08:00
@isCyan 噢,我又摸索了下 default_server 指令,可能我的具体操作有问题(记得之前改过另外某处的配置,加了 default_server 后启动报错 listen wrong param 0.0.0.0:80 之类的,最后没有加 default_server ),然后我调整了一下 rewrite -> rewrite ^/gg(.*)$ /gg$1 break; 总算可以用了 location /gg 了,身心释然

第一次发帖,再次感谢各位~
@jdlau
@qcloud
@newghost
@coffeSlider
@isCyan

总结:
错误 1:server_name 没有设置 ip (在 default_server 未设置成功的情况下需要配置 ip,default_server 待探索)
错误 2:location /gg 需要用 rewrite 来加工 url,否则会出现一些未知的问题(待探索)
最终配置如下:
server{
listen 80;
server_name 118.24.117.188;
# server_name test;
location /gg {
rewrite ^/gg(.*)$ /gg$1 break;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088;
# proxy_redirect off;
}
}
akira
2018-08-06 00:21:41 +08:00
1L 的配置 , 这样修改试试
proxy_pass http://127.0.0.1:8088/gg; => proxy_pass http://127.0.0.1:8088/gg/;
ancelli
2018-08-06 00:25:12 +08:00
servername 改成 ip 然后用 ip 访问
akira
2018-08-06 00:34:18 +08:00
如果服务器上面,就只有一个网站,server_name 后面配置是啥都是可以访问到的。

server_name ip;
server_name "";
server_name 乱写的域名.com;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477079

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX