nginx смешивает кэшированный контент между моими разными доменами

Я не знаю, ошибка ли это, или я неправильно определяю кеш, У меня есть кеш-сервер nginx (обратный прокси), который используется двумя разными доменами ( mydomain1.com и mydomain2.com ), разным содержанием, а не псевдоним домена.

Я определил один кеш, затем определил два домена / vhosts в nginx и настроил его на использование этого кеша, оба домена берут свои данные с одного исходного сервера,но они передают другой виртуальный хост на исходный сервер, поэтому они принимают правильный контент.

Проблема в том, что nginx, кажется, смешивает кеш на двух серверах, доступ к одной домашней странице показывает кешированную домашнюю страницу другой.

Могу ли я я нужен отдельный кеш для каждого виртуального хоста?

Разве NGINX не должен связывать виртуальный хост с каждым запросом? Кажется, он просто связывает исходный сервер, порт и т. Д.

Это заголовок кэшированной домашней страницы, показывающий, что нет ничего, что могло бы различать два vhosts:

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>
0
задан 17 February 2020 в 20:24
1 ответ

Отвечая на свой вопрос как чудак:

Чтобы nginx мог различать одинаковые пути, используемые двумя URL-адресами (например, / ), он должен использовать proxy_cache_key , который по по умолчанию кажется $ scheme $ proxy_host $ request_uri , это не работает в моем случае, когда два домена nginx берут данные с одного и того же исходного сервера (отправляя другой хост заголовок), они оба в конечном итоге используют такой ключ:

КЛЮЧ: http://source.example.com:81 (Я понимаю, что $ proxy_host = исходный сервер)

Решение: укажите proxy_cache_key , который включает текущий $ host , а не $ proxy_host ;

proxy_cache_key $scheme://$host$request_uri;
1
ответ дан 26 February 2020 в 00:36

Теги

Похожие вопросы