nginx代{过}{滤}理不生效,不知怎么回事
本帖最后由 thepoy 于 2020-7-27 16:34 编辑nginx配置
```conf
server {
listen80;
server_name localhost;
location / {
root /usr/share/nginx/html;
indexindex.html index.htm;
}
location /api/ {
proxy_pass http://172.17.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
}
```
代{过}{滤}理用的是go服务器,能正常访问。
index.html内有js调用api,但nginx报错:
```shell
2020/07/27 03:23:30 21#21: *1 open() "/usr/share/nginx/html/api/blogs" failed (2: No such file or directory), client: ::1, server: localhost, request: "GET /api/blogs HTTP/1.1", host: "localhost"
```
从日志中看出来,在访问api时并没有使用代{过}{滤}理服务器,仍然访问的root目录。
请问这应该怎么解决?
【已解决】
nginx.conf文件的proxy_pass段每行代码的前面不知道什么时候多了一些空白字符,所以这段代码没有运行,删了空白字符后proxy正常了
"/usr/share/nginx/html/api/blogs" failed (2: No such file or directory)
报错已经很明显了啊,目录/usr/share/nginx/html/api/blogs不存在,手工创建一个试下 {:17_1072:}这个看着像是/api/跑到/的代{过}{滤}理那里去了 本帖最后由 Vvvvvoid 于 2020-7-27 13:03 编辑
server {
listen80;
server_name localhost;
location /api/ {
root /usr/share/nginx/html;
proxy_pass http://172.17.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
}
这么改试试 本帖最后由 Higher-Stark 于 2020-7-27 15:19 编辑
建议题主把`location /api/ { ... }`放到`location / { ... }`前面,然后再看看。 allen_369228506 发表于 2020-7-27 12:11
"/usr/share/nginx/html/api/blogs" failed (2: No such file or directory)
报错已经很明显了啊,目录/us ...
感谢你的回复,但是不懂就不要回复了吧,你说呢? plumekanade 发表于 2020-7-27 12:20
这个看着像是/api/跑到/的代{过}{滤}理那里去了
/ 并没有代{过}{滤}理,而是直接访问的root目录,之前从来没遇到这种情况 Higher-Stark 发表于 2020-7-27 15:18
建议题主把`location /api/ { ... }`放到`location / { ... }`前面,然后再看看。
没有用,nginx的匹配不分先后,顺序不影响访问结果,放到前面也proxy_pass段也不生效。 thepoy 发表于 2020-7-27 15:24
感谢你的回复,但是不懂就不要回复了吧,你说呢?
很抱歉,可能是我没说清楚对你产生了困扰,你的目的我大概清楚了,现在详细解释下吧。
server {
listen80;
server_name localhost;
location / {
root /usr/share/nginx/html;
indexindex.html index.htm;
}
location /api/ {
1、 proxy_pass http://172.17.0.1:8080/;//http://172.17.0.1:8080/ 带"/"代表采用相对路径,实际请求代{过}{滤}理服务器路径为http://172.17.0.1:8080/usr/share/nginx/html/api/XXX
2、 proxy_pass http://172.17.0.1:8080; //http://172.17.0.1:8080/ 不带"/"代表采用绝对路径,实际请求代{过}{滤}理服务器路径为http://172.17.0.1:8080/api/XXX
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
}
两种差异已经做了说明,因为我没有环境所以只能回答到这里。 allen_369228506 发表于 2020-7-27 16:13
很抱歉,可能是我没说清楚对你产生了困扰,你的目的我大概清楚了,现在详细解释下吧。
server {
...
感谢回复,问题不在这里,是配置文件里多了一些不显示的非空格和制表的空白字符,导到proxy_pass段代码未运行,删除后正常运行了。
因为我的proxy_pass是rest架构的api,所以不存在什么目录。
页:
[1]