2012-05-10 36 views
3

我的所有代碼都在django中,因此使用gunicorn來託管django,並使用nginx作爲反向代理。 我現在想要使用nginx服務器作爲反向代理和apache服務器在同一個域(或子域)上託管一些PHP文件。同時設置nginx作爲Apache和gunicorn的代理

是否有可能爲2臺不同的服務器反向代理服務器nginx? (如果gunicorn失敗,請嘗試apache)

我可以直接在Apache上託管php文件,但端口80是由nginx提取的。比方說,我想主辦一個基於PHP的博客應用程序 - WordPress的博客.XXXX.com使用Apache?並使用我的XXXX.com正規的網站nginx的和gunicorn

這裏是我目前的nginx.conf

server { 
     listen 80; 
     server_name XXXXX.com; 
     root /home/ubuntu/code/; 

     location/{ 
      proxy_pass_header Server; 
      proxy_set_header Host $http_host; 
      proxy_redirect off; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Scheme $scheme; 
      proxy_connect_timeout 120; 
      proxy_read_timeout 120; 
      proxy_pass http://localhost:8000/; 
     } 
    } 
+0

我在看類似的問題..你找到一個解決方案.. – Amistad

回答

0

是的,這是可能的相關部分。您需要將Apache配置爲在不同的端口上偵聽。

不要選擇保留端口,並確保它是開放的(並且您可以訪問它。Unix有一個端口範圍,通常在/proc/sys/net/ipv4/ip_local_port_range定義,如果你選擇了IPv4中,你可能已經在你的Nginx配置來看)

對於Apache配置:

編輯你的apache主配置文件,並設置Listen指令如下:

Listen 127.0.0.1:<port number that's open> //使用8080端口開始

然後如下創建一個虛擬主機:

<VirtualHost 127.0.0.1:<port number defined above>> 
    config goes here 
</VirtualHost> 

您可以通過兩種方式,一是從同一個域,一個來自子域做到這一點。

對於NGINX配置:

來自同一個域:

server { 
    listen 80; 
    server_name XXXXX.com; 

#Django app served using Gunicorn 
    location/{ 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_connect_timeout 120; 
     proxy_read_timeout 120; 
     proxy_pass http://localhost:8000/; 
    } 
#PHP processed by Apache 
    location ~ \.php$ { 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_connect_timeout 120; 
     proxy_read_timeout 120; 
     proxy_pass http://localhost:<port you configured apache to listen on>/; 
    } 
} 

從子域:

#Server block for Django 
server { 
    listen 80; 
    server_name XXXXX.com; 

    location/{ 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_connect_timeout 120; 
     proxy_read_timeout 120; 
     proxy_pass http://localhost:8000/; 
    } 
} 

#Server block for PHP served using Apache with a subdomain 
server { 
    listen 80; 
    server_name blog.XXXXX.com; 

    location/{ 
     proxy_pass_header Server; 
     proxy_set_header Host $http_host; 
     proxy_redirect off; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Scheme $scheme; 
     proxy_connect_timeout 120; 
     proxy_read_timeout 120; 
     proxy_pass http://localhost:<port you configured apache to listen on>/; 
    } 
} 

注:你不需要根指令,因爲你的應用程序由Gunicorn提供服務或被移交給Apache(你將在VirtualHost中定義一個根)

一旦你編輯了你的配置文件,重新啓動Apache,然後重新啓動Nginx,它應該工作。