![Nginx:如何将 HTTP 请求转发到另一个端口?](https://linux22.com/image/617418/Nginx%EF%BC%9A%E5%A6%82%E4%BD%95%E5%B0%86%20HTTP%20%E8%AF%B7%E6%B1%82%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
我想要做的是:当有人访问http://localhost/route/abc
服务器时,响应与http://localhost:9000/abc
现在我像这样配置我的 Nginx 服务器:
location /route {
proxy_pass http://127.0.0.1:9000;
}
HTTP 请求被9000
正确发送到端口,但是它接收的路径http://localhost:9000/route/abc
不是http://localhost:9000/abc
。
有什么建议么?
答案1
我不喜欢这里的微妙之处,但请尝试像下面这样在 9000 的末尾添加一个 /。现在它将不再将“路由”附加到转发的请求中。
location /route {
proxy_pass http://127.0.0.1:9000/;
}
答案2
我相信您可以使用重写来删除 URL 的多余部分。对于您的情况,我认为您可以使用:
location /route/ {
rewrite ^/route/?(.*)$ /$1 break;
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
但是,如果您的应用程序中有内部链接,它们可能仍指向 /abc/foo ,如果您这样做,它们需要指向 /route/abc/foo ,以便原始请求正确进入。如果可以的话,最好保留 nginx 配置,而是配置您的应用程序以了解它位于子目录中。
我知道这是一个老问题,但是当我尝试解决同一问题时,它是我谷歌上最热门的答案!
答案3
尝试以下操作
location /route/ {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
答案4
vimnginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
location / {
proxy_pass http://compute-1-36:8787;
proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
}
}
}
此代码监听 8080 并重定向到 compute-1-36 上的端口 8787。您可以在 location 中选择其他路径/