我有一个Django Rest Framework服务器运行在Gunicorn上,命令如下:gunicorn --bind 0.0.0.0 --forwarded-allow-ips="*" partyapp.wsgi:application --access-logfile - --error-logfile - --log-level debug
我使用Nginx作为反向代理,配置如下:
server {
listen 80;
server_name 162.19.70.85;
location /static/ {
root /var/www;
}
location = /favicon.ico { access_log off; log_not_found off; }
location / {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
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-Host $server_name;
}
}
它运行良好:我可以通过http://{IP}访问该服务,也可以通过http://{IP}:8000直接访问Django服务器。
我不认为这是一个好的行为,我希望人们被“强迫”通过反向代理。我怎么能做到这一点?
3条答案
按热度按时间ifmq2ha21#
在我看来,处理这样一个问题的最简单和最好的方法是将您的应用程序docerize,这样Django应用程序将与nginx内部通信,并为您的Nginx容器只暴露端口80和443。
5m1hhzi42#
经过几次研究,我找到了解决办法。这里的问题是在Gunicorn:
gunicorn --bind 0.0.0.0 --forwarded-allow-ips="*" partyapp.wsgi:application --access-logfile - --error-logfile - --log-level debug
--bind 0.0.0.0
会打开一个端口到野生世界,所以这是一个正常的行为。--bind localhost
或任何其他内部IP工作得很好。Nginx配置需要相应地更新。dauxcl2d3#
**编辑:我做了一些测试,最后终于成功了。**以下是我的解决方案:
我昨天问了同样的问题((Nginx) Redirect to correct location when someone try to access to https://example.com:port),看起来这是一个正常的行为。我得到的唯一建议是阻塞端口。
更具体地说,您可以尝试使用ufw阻止LAN网络外部的端口8000: