nginx 反向代理未返回正确的应用端点
nginx reversre proxy not returning the correct app endpoint
我正在 docker 撰写文件上安装 nginx 反向代理以及一些应用程序(网络数据、文件浏览器等)。
我的想法是从我网络之外的计算机调用 url 类似 http://netdata.myserver.com
并指向网络数据。目前它在我执行 http://myserver.com:19999/
时有效(最终目标是删除子域的端口)。
我在 hosts
文件中有下一个配置:
127.0.0.1 myserver.com # thats not the ip, but you get the idea
所以我在 docker 撰写文件上有 netdata、filebrowser 和 nginx,如下所示:
version: '3'
services:
netdata:
image: netdata/netdata
ports:
- 19999:19999
cap_add:
- SYS_PTRACE
security_opt:
- apparmor:unconfined
filebrowser:
image: filebrowser/filebrowser
user: 501:501
ports:
- 20001:80
volumes:
- volumes and things go here
restart: unless-stopped
nginx:
image: nginx
ports:
- 80:80
volumes:
- default.conf:/etc/nginx/conf.d/default.conf:ro
environment:
- NGINX_HOST=myserver.com
然后在default.conf
我有下一个配置
server {
server_name netdata.myserver.com;
location / {
proxy_pass http://netdata:19999;
}
listen 80;
}
但它没有按预期工作,当我转到 http://netdata.myserver.com
时,我收到“无法访问此站点”但是,如果我转到 http://myserver.com
,它会 return netdata为了我;我也不明白为什么。
有人可以帮我解决这个问题吗?谢谢。
我认为这里可能存在几个问题。首先,如果您希望在 Nginx 后面托管两个基于名称的虚拟主机,您将需要两个 server
块(每个块一个)。所以你的 default.conf
文件应该是这样的:
server {
listen 80;
server_name myserver.com;
location / {
proxy_pass http://filebrowser:2001
}
}
server {
listen 80;
server_name netdata.myserver.com;
location / {
proxy_pass http://netdata:19999;
}
}
您还需要能够解析两个主机名,这意味着
您缺少示例 hosts
文件中的一个条目。你需要
类似于:
127.0.0.1 myserver.com netdata.myserver.com
使用此配置,请求 其他
netdata.myserver.com
将由您的 filebrowser
提供服务
容器。 netdata.myserver.com
的请求将由
netdata
容器。
我整理了一个可运行的例子
here 如果有帮助的话。
这将需要一个类似于以下内容的本地 hosts
文件:
127.0.0.1 myserver.com netdata.myserver.com
我正在 docker 撰写文件上安装 nginx 反向代理以及一些应用程序(网络数据、文件浏览器等)。
我的想法是从我网络之外的计算机调用 url 类似 http://netdata.myserver.com
并指向网络数据。目前它在我执行 http://myserver.com:19999/
时有效(最终目标是删除子域的端口)。
我在 hosts
文件中有下一个配置:
127.0.0.1 myserver.com # thats not the ip, but you get the idea
所以我在 docker 撰写文件上有 netdata、filebrowser 和 nginx,如下所示:
version: '3'
services:
netdata:
image: netdata/netdata
ports:
- 19999:19999
cap_add:
- SYS_PTRACE
security_opt:
- apparmor:unconfined
filebrowser:
image: filebrowser/filebrowser
user: 501:501
ports:
- 20001:80
volumes:
- volumes and things go here
restart: unless-stopped
nginx:
image: nginx
ports:
- 80:80
volumes:
- default.conf:/etc/nginx/conf.d/default.conf:ro
environment:
- NGINX_HOST=myserver.com
然后在default.conf
我有下一个配置
server {
server_name netdata.myserver.com;
location / {
proxy_pass http://netdata:19999;
}
listen 80;
}
但它没有按预期工作,当我转到 http://netdata.myserver.com
时,我收到“无法访问此站点”但是,如果我转到 http://myserver.com
,它会 return netdata为了我;我也不明白为什么。
有人可以帮我解决这个问题吗?谢谢。
我认为这里可能存在几个问题。首先,如果您希望在 Nginx 后面托管两个基于名称的虚拟主机,您将需要两个 server
块(每个块一个)。所以你的 default.conf
文件应该是这样的:
server {
listen 80;
server_name myserver.com;
location / {
proxy_pass http://filebrowser:2001
}
}
server {
listen 80;
server_name netdata.myserver.com;
location / {
proxy_pass http://netdata:19999;
}
}
您还需要能够解析两个主机名,这意味着
您缺少示例 hosts
文件中的一个条目。你需要
类似于:
127.0.0.1 myserver.com netdata.myserver.com
使用此配置,请求 其他
netdata.myserver.com
将由您的 filebrowser
提供服务
容器。 netdata.myserver.com
的请求将由
netdata
容器。
我整理了一个可运行的例子
here 如果有帮助的话。
这将需要一个类似于以下内容的本地 hosts
文件:
127.0.0.1 myserver.com netdata.myserver.com