在同一台伺服器上使用 Nginx 和 Apache 的潛在問題?
我安裝了 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 的客戶端 IPmod_rpaf
)。這是我能想到的唯一可能的設置問題,其他一切看起來都正確。在每個標題中都有 nginx 是正確的,因為 nginx 作為每個網頁的前端,包括靜態和動態的。