使用Nginx和UWSGI服务多个Django站点
我正在尝试使用Nginx为两个Django站点提供服务 我可以为任何一个服务都没有问题,但如果我同时激活这两个,它会将两个URL发送到一个站点。这是我第一次使用Nginx,我通常使用Apache,所以请耐心等待 我在站点中启用了两个站点,如下所示: site1.com:使用Nginx和UWSGI服务多个Django站点,nginx,uwsgi,Nginx,Uwsgi,我正在尝试使用Nginx为两个Django站点提供服务 我可以为任何一个服务都没有问题,但如果我同时激活这两个,它会将两个URL发送到一个站点。这是我第一次使用Nginx,我通常使用Apache,所以请耐心等待 我在站点中启用了两个站点,如下所示: site1.com: server{ server_name www.site1.com; listen 69.164.211.85:80; access_log /var/www/site1.env/logs/access.
server{
server_name www.site1.com;
listen 69.164.211.85:80;
access_log /var/www/site1.env/logs/access.log;
error_log /var/www/site1.env/logs/error.log;
location /static/ {
# Point this wherever the static files for your django app are $
autoindex on;
alias /var/www/site1.env/Site1/static/;
}
location / {
uwsgi_pass 127.0.0.1:3031;
include uwsgi_params;
uwsgi_param UWSGI_APPID site1;
uwsgi_param UWSGI-FILE /var/www/site1.env/Site1/wsgi/site1_wsgi.py;
}
}
site2.net
server{
server_name www.site2.net;
listen 69.164.211.85:80;
access_log /var/www/site2.env/logs/access.log;
error_log /var/www/site2.env/logs/error.log;
location /static/ {
# Point this wherever the static files for your django app are $
autoindex on;
alias /var/www/site2.env/Site2/static/;
}
location / {
uwsgi_pass 127.0.0.1:3032;
include uwsgi_params;
uwsgi_param UWSGI_APPID site2;
uwsgi_param UWSGI-FILE /var/www/site2.env/Site2/wsgi/site2.py;
}
}
我还运行了两个UWSGI实例,从以下脚本开始:
网站1:
description "uWSGI server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi \
--home /var/www/site1.env/Site1/ \
--socket 127.0.0.1:3031 \
--chmod-socket \
--module site1_wsgi \
--pythonpath /var/www/site1.env/Site1/wsgi \
-H /var/www/site1.env
网站2:
description "uWSGI server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/bin/uwsgi \
--home /var/www/site2.env/Site2/ \
--socket 127.0.0.1:3032 \
--chmod-socket \
--module site2 \
--pythonpath /var/www/site2.env/Site2/wsgi \
-H /var/www/sit2.env
这就是我的nginx.conf文件的样子:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/$
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/$
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
我本以为将uwsgi_通行证设置为不同的端口会阻止它们进入同一个端口,但显然我遗漏了其他一些东西。谢谢你的帮助,谢谢 我觉得nginx配置很好。我用相同的代码做了一个测试(两个不同的站点指向不同的端口),并在端口上启动了一个侦听器——每个站点都指向指定的端口 我对uwsgi配置有一些疑问,尤其是环境/路径设置。 尝试以下操作-创建一个
uwsgi1.conf
文件,并将以下内容粘贴到其中:
[uwsgi]
socket = 127.0.0.1:3031
master = true
processes = 8
env = DJANGO_SETTINGS_MODULE=site1.settings
chdir = /var/www/site1.env/Site1/
pythonpath = /var/www/site1.env/
module = django.core.handlers.wsgi:WSGIHandler()
-H /var/www/site1.env
第二个uwsgi2.conf
,包含以下内容:
[uwsgi]
socket = 127.0.0.1:3032
master = true
processes = 8
env = DJANGO_SETTINGS_MODULE=site2.settings
chdir = /var/www/site2.env/Site2/
pythonpath = /var/www/site2.env/
module = django.core.handlers.wsgi:WSGIHandler()
-H /var/www/site2.env
并根据需要更改r env/、chdir和pythonpath的值。然后启动站点,如下所示:
respawn
exec /usr/local/bin/uwsgi --ini /path/to/uwsgi1.conf
第二个是
uwsgi2.conf
。啊,这可能是因为我没有在没有www的情况下包含服务器名称。当我这样做时,它似乎起作用了。我刚刚做了,我仍然遇到同样的问题。还有什么我可能遗漏的吗?我想知道,如果您在没有www.
的情况下使用上述设置进行呼叫,会如何处理请求?你有默认的服务器{server\u name}
定义吗?@Tisho没有,我已经禁用了默认设置。我有一种感觉,它正在把它发送给第一个活跃的人。