Linux

在同一台伺服器上使用 Nginx 和 Apache 的潛在問題?

  • February 23, 2012

我安裝了 nginx 來與 apache 一起處理請求。之前,apache 監聽埠 80,我現在切換到 nginx 監聽埠 80,apache 監聽某個不起眼的埠,如果請求是針對非靜態內容的,則將 nginx proxy_pass 傳遞給 apache。

我的 nginx 配置包含以下內容:

server {
   listen 80;
   server_name static.test.domain.com;
   location / {
       root   /home/test/www/static;
       index  index.html index.htm;
   }

}

server {
   listen       80;
   server_name domain.com *.domain.com;
   location /
   {
       proxy_set_header Server "testserver";
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_pass http://localhost:8800;

   }

   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
   }

}

apache vhost 配置具有以下內容:

NameVirtualHost *:8800

<VirtualHost *:8800>
 DocumentRoot /var/www/html
 ServerName domain.com
 ServerAlias www.domain.com
</VirtualHost>

<VirtualHost *:8800>
 DocumentRoot /home/test/www
 ServerName test.domain.com
</VirtualHost>

...

我注意到請求現在更快了,但我也注意到 nginx 出現在 Server 欄位中的所有請求標頭中,即使請求是針對非靜態頁面的也是如此。這是一個潛在的問題嗎?我已經看到一些伺服器像我的設置一樣在同一 IP 上使用 nginx,但伺服器欄位不同(如果它是非靜態內容請求,則 Apache 顯示,靜態時顯示 nginx)。

此外,我正在使用 APC 進行操作碼記憶體,並且在我的站點目錄中使用帶有一些重定向規則的 .htaccess(我想我需要將一些 apache 規則移植到 nginx 上?有必要嗎?)。我還有一些執行的 Java cron 腳本(這會阻礙 nginx 程序嗎?)這種新設置會導致潛在問題嗎?

很多問題,我知道。但提前謝謝!

**更多資訊:**使用 nginx 1.0.6 和在 Centos 5 32 位上執行的 apache 2.2。

我的 .htaccess 文件(其中一些需要移植到 apache 嗎?):

# BEGIN Compress text files
<ifModule mod_deflate.c>
 <filesMatch "\.(css|js|x?html?|php)$">
   SetOutputFilter DEFLATE
 </filesMatch>
</ifModule>
# END Compress text files


# BEGIN Expire headers
<ifModule mod_expires.c>
 ExpiresActive On
 ExpiresDefault "access plus 1 seconds"
 ExpiresByType image/x-icon "access plus 2592000 seconds"
 ExpiresByType image/jpeg "access plus 2592000 seconds"
 ExpiresByType image/png "access plus 2592000 seconds"
 ExpiresByType image/gif "access plus 2592000 seconds"
 ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
 ExpiresByType text/css "access plus 604800 seconds"
 ExpiresByType text/javascript "access plus 604800 seconds"
 ExpiresByType application/javascript "access plus 604800 seconds"
 ExpiresByType application/x-javascript "access plus 604800 seconds"
 ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
# END Expire headers


# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
 <filesMatch "\.(ico|jpe?g|png|gif|swf)$">
   Header set Cache-Control "max-age=2592000, public"
 </filesMatch>
 <filesMatch "\.(css)$">
   Header set Cache-Control "max-age=604800, public"
 </filesMatch>
 <filesMatch "\.(js)$">
   Header set Cache-Control "max-age=604800, private"
 </filesMatch>
</ifModule>
# END Cache-Control Headers


# BEGIN Turn ETags Off
<ifModule mod_headers.c>
 Header unset ETag
</ifModule>
FileETag None
# END Turn ETags Off

考慮mod_rpaf為 Apache 安裝,這將幫助您在 Apache 訪問日誌中獲取客戶端的 IP 地址,而不是伺服器的 IP 地址(從技術上講,nginx 從 Apache 請求網頁,因此 Apache 將其 IP 辨識為沒有客戶端 IP 的客戶端 IP mod_rpaf)。這是我能想到的唯一可能的設置問題,其他一切看起來都正確。在每個標題中都有 nginx 是正確的,因為 nginx 作為每個網頁的前端,包括靜態和動態的。

引用自:https://serverfault.com/questions/306281