Apache-2.2
nginx 在我的不同域之間混合記憶體內容
我不知道這是一個錯誤還是我錯誤地定義了記憶體,我有一個 nginx 記憶體(反向代理)伺服器,由 2 個不同的域(
mydomain1.com
和mydomain2.com
)使用,不同的內容,而不是別名域。我定義了一個記憶體,然後在 nginx 中定義了兩個域/虛擬主機並將其設置為使用該記憶體,兩個域都從同一源伺服器獲取數據,但它們將不同的虛擬主機傳遞給源伺服器,因此它們獲取正確的內容。
問題是 nginx 似乎混合了兩台伺服器上的記憶體,訪問一個首頁顯示另一台的記憶體首頁。
我需要為每個 vhost 定義一個單獨的記憶體嗎?
NGINX 不應該也將虛擬主機與每個請求相關聯嗎?它似乎只是關聯了一個源伺服器、埠等。
這是記憶體首頁的頭部,顯示兩個虛擬主機之間沒有任何區別:
KEY: http://source.example.com:81/ HTTP/1.1 200 OK Date: Sun, 02 Feb 2020 00:54:33 GMT Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 OpenSSL/1.0.2k-fips PHP/5.4.16 X-Powered-By: PHP/5.4.16 Expires: Sun, 02 Feb 2020 02:54:33 GMT Cache-Control: public, max-age=7200 X-Mod-Pagespeed: 1.13.35.2-0 Vary: Accept-Encoding
我的 NGINX 記憶體設置:
proxy_cache_path /ramdisk/nginx_cache levels=1:2 keys_zone=nginx_ramdisk_cache:512m max_size=3g inactive=30d use_temp_path=off; # defining domain 1 server { [...] server_name mydomain1.com; location / { proxy_pass http://source.example.com:81; proxy_set_header Host mydomain1.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache nginx_ramdisk_cache; } } # defining domain 2 server { [...] server_name mydomain2.com; location / { proxy_pass http://source.example.com:81; proxy_set_header Host mydomain2.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache nginx_ramdisk_cache; } }
在源伺服器(apache)上,我的 2 個虛擬主機定義如下:
<VirtualHost *:81> ServerName mydomain1.com DocumentRoot /var/www/html/mydomain1.com </VirtualHost> <VirtualHost *:81> ServerName mydomain2.com DocumentRoot /var/www/html/mydomain2.com </VirtualHost>
像個怪人一樣回答我自己的問題;
為了讓 nginx 區分兩個 url 使用的相同路徑(例如
/
),它需要使用proxy_cache_key
,預設情況下似乎是$scheme$proxy_host$request_uri
,這在我的情況下不起作用,當兩個 nginx 域從同一源伺服器獲取數據時(通過發送不同的主機頭),他們最終都會使用這樣的密鑰:
KEY: http://source.example.com:81
(我理解 $proxy_host 是 = 源伺服器)解決方案:指定一個
proxy_cache_key
包含目前的$host
,而不是$proxy_host
;proxy_cache_key $scheme://$host$request_uri;