我正在尝试通过 nginx 反向代理将应用程序部署到互联网。 我的应用程序是完全容器化的,我在 /etc/nginx/sites-available 中的 nginx 配置文件与这里的 Shinyproxy 示例相匹配: https ://www.shinyproxy.io/security/
服务器 {
听80;
server_name Shinyproxy.yourdomain.com;
重写 ^(.*) https://$server_name$1 永久;
}
服务器 {
听 443;
server_name Shinyproxy.yourdomain.com;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log 错误;
ssl 上;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/certs/yourdomain.com.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.com.key;
地点 / {
proxy_pass http://127.0.0.1 :8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_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;
}
}
我的域有 https 认证,如果我访问我的域,我会看到“欢迎使用 nginx!” 屏幕。 但是,在我启动我的应用程序以使用以下命令侦听端口 8080 后:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
如果我访问我的域,我仍然会看到“欢迎使用 nginx!” 屏幕。 Nginx 没有将我的域传递给我闪亮的应用程序。 关于为什么代理反向不起作用的任何想法? 我是否将我的容器化闪亮应用程序启动到了错误的端口?
您的反向引擎 proxy_pass 指令路由到主机本地网络 (127.0.0.1)。 当你容器化你的应用程序时,你正在从本地主机网络转移到 docker 生态系统网络。 因此,您如何启动和发布您的 Shinyproxy 到主机很重要。 查看这篇关于docker 网络的文章
感谢您的帮助。 在阅读了文章并进行了更多故障排除后,我仍然没有找到解决方案。 我需要更改代理通行证的 127.0.0.1 部分吗? 或者我是否需要启动我的 docker 容器来收听 8080:8080 以外的其他地方?
你如何启动你的闪亮代理?
嗨@lucius-verus-fan
可以肯定的是,使用以下命令您正在尝试启动 ShinyProxy,对吗?
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
那么wind_container
是您创建的包含 ShinyProxy 的客户容器吗?
在这种情况下,我认为问题与 Docker 网络无关,命令的-p 8080:8080
部分确保将端口 8080 转发到您的本地机器,与容器在哪个 docker 网络中运行无关。
相反,我认为错误出在您的 nginx 配置中,您必须更改这些行以匹配您的设置:
server_name shinyproxy.yourdomain.com;
rewrite ^(.*) https://$server_name$1 permanent;
# a few lines lower
server_name shinyproxy.yourdomain.com;
您必须在那里指定服务器的正确域名。 现在您告诉 nginx 将shinyproxy.yourdomain.com
上的任何请求作为对 ShinyProxy 的请求进行处理,任何其他请求都将导致 404。因此,由于您没有通过shinyproxy.yourdomain.com
访问它,nginx 会给你是404。
你好@LEDfan和@jaysnm
我用来启动 ShinyProxy 的命令是:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
我在第一条评论中附加的 nginx 配置不是我正在使用的 nginx 配置,这是 Shinyproxy 网站上给出的示例。 我将在下面附上我正在使用的 nginx 配置文件。
server {
listen 80;
server_name windts.app www.windts.app;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name windts.app www.windts.app;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log error;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/certs/windts.app.crt;
ssl_certificate_key /etc/ssl/private/windts.app.key;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_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;
}
}
当访问域 windts.app 或www.windts.app 时,您将被发送到 Nginx 欢迎页面,而不是被传递到 Shinyproxy 应用程序。 该应用程序可以在本地以及远程服务器上正确运行。 这只是将域连接到运行 Shinyproxy 应用程序的容器的问题。
我已经解决了这个问题。 Nginx 没有显示 Shinyproxy 应用程序,因为我忽略了将 /etc/nginx/sites-available/ 中的 nginx 配置文件链接到 /etc/nginx/sites-enabled。 使用ls -s
命令链接我在两个目录中的配置并从 /etc/nginx/sites-enabled 中删除默认配置文件后,shinyproxy 应用程序显示在我的域中。
作为记录,它是ln -s
[原文如此],但感谢您分享反馈,并且很好地解决了您的问题!
最有用的评论
我已经解决了这个问题。 Nginx 没有显示 Shinyproxy 应用程序,因为我忽略了将 /etc/nginx/sites-available/ 中的 nginx 配置文件链接到 /etc/nginx/sites-enabled。 使用
ls -s
命令链接我在两个目录中的配置并从 /etc/nginx/sites-enabled 中删除默认配置文件后,shinyproxy 应用程序显示在我的域中。