我正在尝试设置一个debian服务器,我有多个应用程序运行在docker容器中,每个容器都有自己的端口。
让我们假设它的IP是(160.160.160.160),链接到一个域example160.com和两个应用程序(两个docker容器),运行在5500和600上
我还设置了一些反向代理配置,这样我就可以通过app5500.example160.com和app6600.example160.com这样的子域访问应用程序。
下面是其中一个配置的示例
server {
listen 443 ssl; # managed by Certbot
server_name app5500.example160.com;
location / {
proxy_pass https://127.0.0.1:80/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
ssl_certificate /etc/letsencrypt/live/example160.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example160.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
listen 80;
server_name app5500.example160.com;
if ($host = app5500.example160.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
return 404; # managed by Certbot
}
字符串
正如你所看到的,我做了一个从http到https的重定向,只有当我试图访问http://app5500.example160.com时才能工作,但问题是我仍然能够通过url访问容器,如http://www.example160.com:5500和http://160.160.160.160:5500,我不知道如何阻止它,以便只能通过https://app5500.example160.com访问容器
我尝试了这个解决方案,但添加了其他nginx配置来重定向其他子域,但它不起作用
server {
listen 443 ssl;
server_name *.example160.com;
if ($host !~ ^example160\.com$) {
return 301 https://example160.com$request_uri;
}
ssl_certificate /etc/letsencrypt/live/example160.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example160.com-0001/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
return 404;
}
server {
listen 80 default_server;
server_name *.example160.com;
return 301 https://example160.com$request_uri;
}
型
我甚至尝试用iptables和nftables设置防火墙,但最终没有安装防火墙,因为它们没有帮助。
1条答案
按热度按时间wi3ka0sx1#
不要在所有接口上发布容器端口,而是将它们绑定到localhost:
字符串
这样,它们将 * 仅 * 可由您的nginx代理访问;将无法从远程位置直接连接到端口。
或者,在容器中运行代理(如果您还没有这样做),然后根本不需要发布容器端口 *。代理将能够直接连接到容器,因为它们将在同一内部网络上运行。
您只需要发布代理端口。