我有一个现有的 Apache 为几个站点提供服务。
现在我有一个新的 django 网站,它是 ajax 密集型的,所以我计划在 apache 的 mod_wsgi 上运行它,但我会使用 nginx 作为反向代理。
是否可以让 nginx 作为这个新的 django 站点的反向代理,同时让 apache 直接为其他站点提供服务而不使用 nginx?
此外,如果可能的话,如果您能给我一个粗略的设置,告诉我如何做。
答案1
我解决这个问题的方法是让 nginx 反向代理所有站点,但让它们转到监听不同端口的不同 apache 虚拟主机。
nginx(在 /etc/nginx 中)
代理配置文件
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;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k; proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
/etc/nginx/sites-enabled/default
server {
listen 80;
server_name django-site.com;
location / {
proxy_pass http://127.0.0.1:8085;
include /etc/nginx/proxy.conf;
}
}
server {
listen 80;
server_name regular-site.com;
location / {
proxy_pass http://127.0.0.1:8086;
include /etc/nginx/proxy.conf;
}
}
Apache 设置 /etc/apache2/sites-enabled
django 网站
NameVirtualHost 127.0.0.1:8085
<VirtualHost 127.0.0.1:8085>
ServerName django-site.com
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonOption django.root
PythonDebug On
PythonPath "['/django/django-site'] + sys.path"
</Location>
</VirtualHost>
常规站点
NameVirtualHost 127.0.0.1:8086
<VirtualHost 127.0.0.1:8086>
ServerName regular-site.com
ServerAlias regular-site.com
ServerAdmin [email protected]
DocumentRoot /var/www/regular-site/
</VirtualHost>
在 /etc/apache2/apache2.conf 中
# Include ports listing
Include /etc/apache2/ports.conf
ports.conf 必须列出每个端口 /etc/apache2/ports.conf
#Listen 80
#disabled for nginx
Listen 8085
Listen 8086
<IfModule mod_ssl.c>
Listen 443
</IfModule>