我正在为我的django应用程序安装生产服务器,但我无法使其正常工作。我的配置文件可以找到here
基本上我已经在我的php应用程序的端口80上安装并运行了apache2。除了apache2之外,我想用uwsgi在nginx上运行我的django应用程序。所以我在端口8000上运行nginx
当我打开http://IP:8000/
时,我可以正确地看到我的网站
的 1。但是如何使用域名进行设置?
我已将dns中的A标记设置为IP。现在它打到apache2"它可以工作"页面,因为它默认命中端口80?所以我需要代理将所有请求传递给我的domain.com?这样的事情?
/etc/apache2/sites-enabled/domain.com
:
<VirtualHost *:80>
ServerName domain.com
ProxyPreserveHost On
ProxyPass / http://IP:8000
</VirtualHost>
它不起作用,那么如何将所有域请求从apache传递到nginx?
的 2。如何添加其他域名? (新应用)
我是否只为新应用创建新的套接字文件,将其保留在端口8000上,nginx将根据域名决定使用哪个conf文件?
我还没有找到任何类似的教程,nginx通常处理静态文件并向apache2发送请求。但是我想以其他方式。
答案 0 :(得分:1)
感谢您的回答。为了使它工作,我不得不像这样设置apache代理:
<VirtualHost *:80>
ServerName www.domain.com
ProxyPreserveHost On
ProxyPass /static http://XX.XX.XX.XX:8000/static
ProxyPassReverse /static http://XX.XX.XX.XX:8000/static
ProxyPass / http://XX.XX.XX.XX:8000
ProxyPassReverse / http://XX.XX.XX.XX:8000
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.(?!\.css|js|gif|png|jpg|ico))*$
RewriteRule /(.*) http://XX.XX.XX.XX:8000/$1 [P,L]
</VirtualHost>
并启用proxy_http:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo service apache2 restart
答案 1 :(得分:0)
<强> 1。如何使用域名进行设置? 在nginx conf文件的服务器块中设置server_name:
server {
listen 8000;
server_name www.my-django-domain-one.foobar;
#rest of your config regarding forwarding to django...
}
您的网站将在http://www.my-django-domain-one.foobar:8000
上提供。
<强> 2。你如何添加另一个域名? (新应用) Nginx不会根据conf文件名做出任何决定。创建一个新的conf文件或使用现有的文件(仅在你想如何组织你的配置的意义上)
server {
listen 8000;
server_name www.my-django-domain-two.foobar;
#rest of your config regarding forwarding to django...
}
但是,我建议只涉及一个Web服务器的方法。关于哪些使用的意见当然不同,但它们都可以做你想要实现的目标。您为设置添加了不必要的复杂性(例如,两个服务器要保持修补),并且 - 根据您的流量 - 它甚至可能对您的性能产生重大影响。
查看此tutorial以了解如何使您的php应用程序与nginx和php-fpm一起使用。