【问题标题】:django apps on nginx running separately from apachenginx 上的 django 应用程序与 apache 分开运行
【发布时间】:2015-07-29 04:53:06
【问题描述】:

我正在为我的 django 应用程序安装生产服务器,但我无法让它工作。我的配置文件可以在here找到。
基本上,我为我的 php 应用程序安装了 apache2 并在端口 80 上运行。我想用 uwsgi 在 nginx 上运行我的 django 应用程序,除了 apache2。所以我在 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发送请求。但是我想要其他方式。

【问题讨论】:

    标签: django apache nginx


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      1.域名怎么设置? 在你的 nginx 配置文件的 server 块中设置 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 一起工作。

      【讨论】:

      • 您好,感谢您的出色回答。但是,如何在没有端口 8000 的情况下使网站可用?
      • 恐怕我对使用 apache2 的了解还不够,无法给你一个明确的答案。也许在将 apache2 配置为反向代理时尝试这个tutorial。或this one。第二个专门针对带有 ssl 的码头(忽略 ssl 部分),但应该适用相同的原则。
      • 更具体地说:我相信您应该在 apache2 配置中查看 ProxyPassReverse 而不是 ProxyPass
      猜你喜欢
      • 2019-08-12
      • 2012-04-13
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2010-11-07
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多