nginx - Nginx 保留 $request_uri
问题描述
我不确定我想要的行为是否真的可以在 nginx 本地实现,但这里就可以了。
我有一个在端口 81 上运行的服务器,其 nginx 配置如下:
CONFIGURATION OF SERVER1 NGINX
server {
listen 81;
server_name SERVER_DNS_NAME;
location /server1 {
proxy_pass http://127.0.0.1:8084/;
proxy_set_header Host $host;
}
location / {
proxy_pass http://127.0.0.1:8084;
proxy_set_header Host $host:$server_port;
}
}
我在端口 82 上运行了另一台具有类似配置的服务器。现在我想做的是能够从端口 80 访问它们,只是使用不同的 uris。
例如:URL/server1 会将我带到第一个服务器,而 URL/server2 会将我带到第二个服务器。
CONFIGURATION OF NGINX LISTENING ON PORT 80
server {
listen SERVER_IP:80;
location /server1{
proxy_set_header Host $host;
http://SERVER_IP:81;
}
location /server2 {
proxy_pass http://SERVER_IP:82;
proxy_set_header Host $host;
}
当我转到 URL/server1 时,这工作正常。我已成功路由到 server1 上的主页。但是,只要我单击 server1 上页面上的任何链接,我就会得到 404。这是因为该站点试图转到 URL/some_subdir_of_server1(没有映射)而不是 URL/server1/some_subdir_of_server1。这种行为可行吗?如果有怎么办?
谢谢!
解决方案
小心尾随斜杠:在您的示例中,您
proxy_pass http://SERVER_IP:81/;
将代理 URL 设置为 root/
推荐阅读
- swift - 为什么模型中存在的数据不能在 UILabel 中显示
- r - 在 highcharter 向下钻取 barplot 中获取第一列和第二列名称
- machine-learning - 单 GPU 上的 Transformer 模型微调
- python - Pandas:从长到宽的数据帧的分组和自定义转换
- java - 通过 JDBC 语句执行 DDL 删除模式的 Spring Boot 错误
- blender - 如何使用 Python 搅拌器从另一个具有相同骨骼名称的骨架复制旋转约束
- postgresql - Postgres SQL:要命名的行,值 json 对
- angular - AngularJS:所选选项不起作用
- amazon-web-services - 更改已在运行的 Amazon MQ 代理的子网
- docker - `docker build --network 容器的可能用例是什么:
`?