2010-08-08 27 views
10

我剛剛設置nginx服務於一個網站上的靜態請求,但我有很多網站在我的服務器上,我想知道,我應該對新的nginx服務器配置爲他們所有? 我現在在做什麼。我有文件,所有虛擬主機條目阿帕奇一些,這樣的事:Apache和終極配置爲nginx以正確的方式服務所有虛擬主機

NameVirtualHost *:8080 
<VirtualHost *:8080> 
ServerName sky2high.net 
DocumentRoot /home/mainsiter/data/www/sky2high.net 
</VirtualHost> 

<VirtualHost *:8080> 
ServerName surdo.asmon.ru 
DocumentRoot /home/surdo/data/www/surdo.asmon.ru 
</VirtualHost> 

<VirtualHost *:8080> 
ServerName surdoserver.ru 
DocumentRoot /home/surdo/data/www/surdoserver.ru 
</VirtualHost> 

我在Apache的ports.conf有這樣的:

Listen 8080 

所以我已經設置了nginx的工作有一個網站(sky2high.net),創建下一個配置文件(/etc/nginx/sites-enabled/sky2high.net):

server { 
listen 80; 
server_name sky2high.net www.sky2high.net; 
    proxy_pass http://127.0.0.1:8000; 
    proxy_set_header Host $host; 

access_log /var/log/nginx.access_log; 

location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { 
    root /home/mainsiter/data/www/sky2high.net/; 
    index index.php; 
    access_log off; 
    expires 30d; 
} 
location ~ /\.ht { 
    deny all; 
} 
location/{ 
    proxy_pass http://127.0.0.1:8080/; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-for $remote_addr; 
    proxy_set_header Host $host; 
    proxy_connect_timeout 60; 
    proxy_send_timeout 90; 
    proxy_read_timeout 90; 
    proxy_redirect off; 
    proxy_set_header Connection close; 
    proxy_pass_header Content-Type; 
    proxy_pass_header Content-Disposition; 
    proxy_pass_header Content-Length; 
} 
} 

而且它這個領域工作得很好,但當然另一個虛擬主機破碎。

所以,問題是:是否有nginx的最終配置選項,女巫可以幫助處理來自所有虛擬主機(域)的所有請求,並以正確的方式提供服務?我的意思是,允許不爲每個虛擬主機編寫separete配置文件的選項(所有這些都是根和索引選項的加倍),但只有一個適用於所有虛擬主機?

PS:我應該將問題移至serverfault?

更新: 嗯..我不知道它是如何工作,但它是。我做了下一個配置文件:

/etc/nginx/nginx.conf

user www-data; 
worker_processes 2; 

error_log /var/log/nginx/error.log; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    access_log /var/log/nginx/access.log; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 
    tcp_nodelay  on; 

    gzip    on; 
    gzip_min_length 1000; 
    gzip_proxied  any; 
    gzip_disable  "msie6"; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

的/ etc/nginx的/ /默認情況下啓用站點,

server { 
    listen 80; 

    location/{ 
     proxy_pass http://127.0.0.1:8080/; 
     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; 
     proxy_set_header Connection close; 
     proxy_pass_header Content-Type; 
     proxy_pass_header Content-Disposition; 
     proxy_pass_header Content-Length; 
    } 
} 

我不明白它是如何工作的,但它是...

更新2:或它不工作!我已經在控制檯中看到「頂部」,並指出apache不僅僅服務於PHP請求,而且還爲靜態內容提供服務=(

回答

7

你現在要做的是將所有網絡流量發送到127.0.0.1:8080,而不允許Nginx服務於靜態文件

你應該嘗試如下:

server { 
listen 80; 
server_name sky2high.net www.sky2high.net; 
location/{ 
proxy_pass http://127.0.0.1:8080; 
include /etc/nginx/conf.d/proxy.conf; 
} 
location ~* ^.+\.(jpg|jpeg|gif|png|ico|tgz|gz|pdf|rar|bz2|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf) { 
root /folder/to/static/files; 
expires 90d; 
} 
location ~* ^.+\.(css|js)$ { 
root /folder/to/static/files; 
expires 30d; 
} 

而且在proxy.conf你把以下內容:

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 8m; 
client_body_buffer_size 256k; 
proxy_connect_timeout 60; 
proxy_send_timeout 60; 
proxy_read_timeout 60; 
proxy_buffer_size 4k; 
proxy_buffers 32 256k; 
proxy_busy_buffers_size 512k; 
proxy_temp_file_write_size 256k; 

這個建議立即進行刪除d爲你工作

+1

你可能想改變一個行: proxy_set_header $ host主機:$ proxy_port使用; – dalore 2012-11-26 17:54:34

2

只是我的兩分錢,在大多數情況下,沒有必要指定listen 80

來源:Nginx common Pitfalls