我用docker安装了一个Portainer,端口是 9000,访问地址,192.168.1.201:9000
我现在想利用 Nginx 进行重写,当访问 http://192.168.1.201/Portainer 时,实际访问的是 192.168.1.201:9000。
我自己加的重写配置,但是却直接进入了 错误页,我不知道是什么问题,请问这个我应该怎么配置呢
红框中的配置改为如下内容就可以了。
location /Portainer {
rewrite /Portainer / break;
proxy_pass http://192.168.1.201:9000;
}
我照着上面的修改了配置,可以错误从原来的 502 变成了 404.
127.0.0.1:9000 本身是可以访问的
location /Portainer { rewrite /Portainer / break; proxy_pass http://127.0.0.1:9000; }
照着老师的又修改了一下,已经可以了,感谢
要配置Nginx以将http://192.168.1.201/Portainer
的请求代理到192.168.1.201:9000
,你需要使用Nginx的location
块和proxy_pass
指令,而不是rewrite
指令(除非你需要更复杂的URL重写逻辑,但在这个例子中你不需要)。
下面是一个基本的Nginx配置示例,它将http://192.168.1.201/Portainer
的请求代理到192.168.1.201:9000
:
server {
listen 80;
server_name 192.168.1.201;
location /Portainer/ {
# 去掉URI中的/Portainer部分,这样Portainer应用就能正确处理剩余的URI
proxy_pass http://192.168.1.201:9000/;
# 设置请求头,这样Portainer可以识别代理过来的请求
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 如果你希望保持原始的请求URI(包括/Portainer部分),则不需要下面的指令
# 但这通常不是Portainer所期望的,因为它可能期望根路径作为URI的开始
# proxy_set_header X-Original-URI $request_uri;
# 其他可能的配置,比如设置超时时间等
# ...
}
# 可能还有其他location块用于处理其他请求
# ...
}
注意几个关键点:
proxy_pass
后面的URL末尾的斜杠(/
)很重要,因为它告诉Nginx在转发请求时去除location
块中指定的URI部分(即/Portainer/
)。这样Portainer应用就能像接收直接请求那样接收转发过去的请求。proxy_set_header
指令用于设置传递给后端服务器的请求头。这通常包括Host
、X-Real-IP
、X-Forwarded-For
和X-Forwarded-Proto
,以帮助后端服务器识别请求的来源和协议。/Portainer/
),你可以去掉proxy_pass
后面的斜杠,但请确保Portainer应用能够正确处理这种URI格式。将上述配置添加到你的Nginx配置文件中,并重新加载或重启Nginx服务以使更改生效。然后,你应该能够通过http://192.168.1.201/Portainer
访问Portainer应用,而实际请求会被Nginx代理到192.168.1.201:9000
。