我可以直接访问Django服务器尽管nginx反向代理

14ifxucb  于 2023-03-20  发布在  Go
关注(0)|答案(3)|浏览(153)

我有一个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服务器。
我不认为这是一个好的行为,我希望人们被“强迫”通过反向代理。我怎么能做到这一点?

ifmq2ha2

ifmq2ha21#

在我看来,处理这样一个问题的最简单和最好的方法是将您的应用程序docerize,这样Django应用程序将与nginx内部通信,并为您的Nginx容器只暴露端口80和443。

5m1hhzi4

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配置需要相应地更新。

dauxcl2d

dauxcl2d3#

**编辑:我做了一些测试,最后终于成功了。**以下是我的解决方案:

server {
    listen 192.168.178.100:8000 ssl;
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.key;

    return 301 https://example.com/location;
}

我昨天问了同样的问题((Nginx) Redirect to correct location when someone try to access to https://example.com:port),看起来这是一个正常的行为。我得到的唯一建议是阻塞端口。
更具体地说,您可以尝试使用ufw阻止LAN网络外部的端口8000:

sudo ufw allow from 192.168.1.0/24 to any port 8000

相关问题