我第一次尝试在服务器上部署我的Django应用程序,但到目前为止,我还不能摆脱URL中的端口。现在我使用的是Gunicorn和Nginx,配置如下。
Nginx etcnginxsites-enabledsite.conf。
server {
listen 8000;
server_name example.com;
location = /favicon.ico {access_log off;log_not_found off;}
location /static/ {
root /home/webapp/um;
}
location /media/ {
root /home/webapp/um;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/webapp/um/um.sock;
}
}
etcnginxproxy_params
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;
Gunicorn等systemdsystemgunicorn.service。
Description=gunicorn service
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/webapp/um/
ExecStart=/root/um/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/webapp/um/um.sock um.wsgi:application
[Install]
WantedBy=multi-user.target
牯牛角装订
gunicorn --bind 0.0.0.0:8000 um.wsgi:application
在etcnginxsites-enabledsite.conf中把8000端口改为80端口,在nginx上得到一个404。使用8000端口时,我可以使用 http:/example.com:8000myapp。 但我的目标是使用 http:/example.commyapp。 作为我的地址.作为一个附带说明,我安装应用程序的VPS上已经安装了Plesk,我也不熟悉。我不知道Plesk是否会干扰到80端口的流量。
先谢谢你了
server {
listen 80;
server_name 52.14.64.58 example.com www.example.com;
location = /favicon.ico {access_log off;log_not_found off;}
location /static/ {
root /home/webapp/um;
}
location /media/ {
root /home/webapp/um;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/webapp/um/um.sock;
}
}
52.14.64.58 => 是你的虚拟机的ipv4,在你的情况下,它可能是任何东西。
ALLOWED_HOSTS = ['IP_ADDRESS', 'example.com', 'www.example.com']
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart gunicorn
经过一番挣扎,我找到了解决办法。原来我的配置是正确的,但是有一个由plesk自动编写的nginx配置文件在80端口捕捉请求。这个文件的内容是
server {
listen 111.111.111.111:80;
location ^~ /plesk-site-preview/ {
proxy_pass http://127.0.0.1:8880;
proxy_set_header Host plesk-site-preview.local;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_domain plesk-site-preview.local $host;
access_log off;
}
location / {
proxy_pass http://111.111.111.111:7080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 111.111.111.111:443 ssl;
ssl_certificate /opt/psa/var/certificates/certWpPLaPv;
ssl_certificate_key /opt/psa/var/certificates/certWpPLaPv;
location ^~ /plesk-site-preview/ {
proxy_pass http://127.0.0.1:8880;
proxy_set_header Host plesk-site-preview.local;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_domain plesk-site-preview.local $host;
access_log off;
}
location / {
proxy_pass https://111.111.111.111:7081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
当我把这个文件从nginx.conf中删除后,一切都开始工作了。对于遇到类似情况的人,我建议使用下面的命令检查Nginx正在处理什么。
nginx -T