Кэш прокси Nginx не работает с сеансом php

Администрирование сервера абсолютно не является моим доменом - к сожалению, я застрял с настройкой сервера с nginx в качестве статического сервера ресурсов и apache позади с php-fpm для обслуживания страниц php.

Я пытаюсь установить прокси-кеширование и он работает, только если я не использую сеансы php. я могу упустить здесь точку, но, насколько я понимаю, я не понимаю, почему кеширование не должно быть возможным, если стандартный файл cookie сеанса php не используется для аутентификации?

поэтому я предполагаю, что это проблема конфигурации, но я бью головой об этом один. Я публикую свои настройки здесь - надеюсь, кто-нибудь сможет подтолкнуть меня в правильном направлении. У меня есть файл php, в котором нет ничего, кроме:

session_cache_limiter('public');
ini_set('session.cache_expire', 1000);
session_start();
echo "OK";
die();

nginx.conf:

user www-data;
worker_processes 6;
worker_rlimit_nofile 50000;
pid /run/nginx.pid;

events {
        worker_connections  8096;
        multi_accept        on;
    use                 epoll;
}

http {
    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 15;
    types_hash_max_size 2048;
    server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

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

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

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

    log_format cache '***$time_local '
                   'req_time=$request_time '
                   '$upstream_cache_status '
                   'Cache-Control: $upstream_http_cache_control '
                   'Expires: $upstream_http_expires '
                   '"$request" ($status) '
                   '"$http_user_agent" ';

    access_log /var/log/nginx/cache.log cache;

    ##
    # Gzip Settings
    ##
        gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;


    ##
    # Proxy Settings
    ##
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_temp_path /var/data/nginx/tmp;
    proxy_cache_path /var/data/nginx/cache/proxy levels=1:2 keys_zone=proxy_cache:10m max_size=1024m inactive=60m use_temp_path=off;
    fastcgi_cache_path /var/data/nginx/cache/fcgi levels=1:2 keys_zone=fcgi_cache:10m max_size=1024m inactive=60m; add_header X-Cache $upstream_cache_status;

    ## cookie mapping
    map $http_cookie $session_cookie {
        default ""; 
        ~PHPSESSID=(?<sessionkey>[a-zA-Z0-9]+) $sessionkey;
    }

    ## mapping cache to request method
    map $request_method $no_cache {
        default 1; # by default do not cache
        HEAD 0; # cache HEAD requests
        GET 0; # cache GET requests
    }

    ## map purge request
    map $request_method $purge_method {
            PURGE   1;
            default 0;
    }

    # Allow underscores in header
       underscores_in_headers on;

        # Set Max Client Body size to 10 MB        
        client_max_body_size 10M;

    ##
    # Virtual Host Configs
    ##

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

vhost conf:

# http
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    return 302 https://$server_name$request_uri;
}

# https
server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;

    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    root /var/www/;
    index index.php;

    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        on;
    keepalive_timeout  15;

    location / {
        access_log off;
        log_not_found off;
        try_files $uri $uri/ @apache;
        index index.html index.htm index.php;
    }
    location ~* \.(jpg|jpeg|gif|png|svg|css|js|ico|xml|woff|woff2|eot|ttf)$ {
        access_log          off;
        log_not_found       off;
        expires             30d;
        autoindex           off;
        add_header          Pragma "public";
        add_header          Cache-Control public; 
        add_header          Cache-Control "max-age=43200, public, must-revalidate, proxy-revalidate"; 
        gzip_static         on;
        gzip_min_length     1000;
        gzip_comp_level     2;
    }
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }
    location = /robots.txt {
        access_log off;
        log_not_found off;
    }
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    location ~*|\.php*$ {
        access_log off;
        log_not_found off;

        # Apache reverse proxy and caching turn proxy buffering to "on" to enable
        proxy_buffering on;
        include /etc/nginx/proxy_params;

        proxy_pass https://127.0.0.1:8088;
        proxy_cache proxy_cache;
        proxy_cache_revalidate on;
        proxy_cache_lock on;
        proxy_cache_valid 200 302 5m;
        proxy_cache_valid 404 1m;
        proxy_cache_valid any 3m;
        proxy_cache_min_uses 3;
        proxy_cache_key $proxy_host$request_uri$session_cookie;
    }
    location @apache {
        access_log off;
        log_not_found off;

        # Apache reverse proxy and caching turn proxy buffering to "on" to enable
        proxy_buffering on;
        include /etc/nginx/proxy_params;
        proxy_pass https://127.0.0.1:8088;
    }
}

и параметров прокси:

client_max_body_size 100M;
client_body_buffer_size 1m;
proxy_intercept_errors on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 10m;
proxy_read_timeout 300;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

add_header X-Cache-Status $upstream_cache_status;
add_header X-Handled-By $proxy_host;

Я продолжаю получать промах кеша:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Nov 2017 12:27:25 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: PHPSESSID=c183rru5i3fgj5map7jqgbf2do; path=/
Expires: Thu, 23 Nov 2017 05:07:25 GMT
Cache-Control: public, max-age=60000
Last-Modified: Wed, 22 Nov 2017 12:20:41 GMT
Vary: Accept-Encoding
X-Cache-Status: MISS
X-Handled-By: 127.0.0.1:8088

Важно: хост работает под ssl

, есть ли здесь подсказка для меня? спасибо

2
задан 22 November 2017 в 14:34
2 ответа

оказалось, что я был слишком глуп, чтобы понять, что выполнение запроса curl не разрешает хранение сеанса (естественно), поэтому каждый запрос попадает в кеш, поскольку никакие файлы cookie не могут быть установлены таким образом. и поскольку я включаю идентификатор сеанса в ключ кеша, он не работает;)

0
ответ дан 3 December 2019 в 14:06

Насколько я понимаю, вы хотите кэшировать местоположение @apache, но это не удается, верно? Если это ваша проблема, то это потому, что вы не активируете кеш nginx в месте @apache. Вам нужно добавить proxy_cache proxy_cache; в / etc / nginx / proxy_params . Если это не то, что вы хотите сделать, более четко опишите вашу проблему или то, что вы хотите сделать.

0
ответ дан 3 December 2019 в 14:06

Теги

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