thepoy 发表于 2020-7-27 11:42

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正常了


allen_369228506 发表于 2020-7-27 12:11

"/usr/share/nginx/html/api/blogs" failed (2: No such file or directory)
报错已经很明显了啊,目录/usr/share/nginx/html/api/blogs不存在,手工创建一个试下

plumekanade 发表于 2020-7-27 12:20

{:17_1072:}这个看着像是/api/跑到/的代{过}{滤}理那里去了

Vvvvvoid 发表于 2020-7-27 13:01

本帖最后由 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:18

本帖最后由 Higher-Stark 于 2020-7-27 15:19 编辑

建议题主把`location /api/ { ... }`放到`location / { ... }`前面,然后再看看。

thepoy 发表于 2020-7-27 15:24

allen_369228506 发表于 2020-7-27 12:11
"/usr/share/nginx/html/api/blogs" failed (2: No such file or directory)
报错已经很明显了啊,目录/us ...

感谢你的回复,但是不懂就不要回复了吧,你说呢?

thepoy 发表于 2020-7-27 15:25

plumekanade 发表于 2020-7-27 12:20
这个看着像是/api/跑到/的代{过}{滤}理那里去了

/ 并没有代{过}{滤}理,而是直接访问的root目录,之前从来没遇到这种情况

thepoy 发表于 2020-7-27 15:56

Higher-Stark 发表于 2020-7-27 15:18
建议题主把`location /api/ { ... }`放到`location / { ... }`前面,然后再看看。

没有用,nginx的匹配不分先后,顺序不影响访问结果,放到前面也proxy_pass段也不生效。

allen_369228506 发表于 2020-7-27 16:13

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;
                }
      }

两种差异已经做了说明,因为我没有环境所以只能回答到这里。

thepoy 发表于 2020-7-27 16:38

allen_369228506 发表于 2020-7-27 16:13
很抱歉,可能是我没说清楚对你产生了困扰,你的目的我大概清楚了,现在详细解释下吧。
server {
   ...

感谢回复,问题不在这里,是配置文件里多了一些不显示的非空格和制表的空白字符,导到proxy_pass段代码未运行,删除后正常运行了。
因为我的proxy_pass是rest架构的api,所以不存在什么目录。
页: [1]
查看完整版本: nginx代{过}{滤}理不生效,不知怎么回事