我试图在子目录上设置代理但不能让它工作......
我想将子目录中的所有请求代理到另一个端口
例如
http://domain.com/websocket/test.php => http://domain.com:8080/websocket/test.php
但是无法使其正常工作..如果要求匹配404
的路径,我现在已经尝试返回/websocket
。但这不会起作用
我在这里缺少什么?!
PHP文件按原样执行..
/test.php
/websocket/server.php
/websocket/test.php
请求所有网址都没有问题,但/websocket/server.php
和/websocket/test.php
应该返回404
(请查看nginx conf)
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include /var/ini/nginx/fastcgi.conf;
fastcgi_pass php;
fastcgi_index index.php;
}
location /websocket {
return 404;
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
答案 0 :(得分:1)
有location
块的各种类型及其评估顺序的规则。有关详细信息,请参阅this document。
location ~ ...
块是正则表达式类型,按顺序计算,但优先级高于任何前缀位置(例如location /websocket
)。
如果您希望前缀位置的优先级高于正则表达式位置块,则:
- 使用^~
修饰符,或
- 将其转换为正则表达式块并首先进行排序。
例如:
location ^~ /websocket { ... }