У меня проблема с nginx и запросами XHR, передающими файлы cookie между блоками сервера. Я пытался использовать балансировщик нагрузки CloudFlare на трех nginx серверах, обеспечивающих доступ к интерфейсу, а также доступ через API (через XHR) к нашему приложению.
Если оба интерфейса и URL-адреса API указаны в имени_сервера тот же блок сервера, cflb cook ie правильно передается в запросах, и они направляются на один и тот же исходный сервер. Если интерфейсный интерфейс и URL-адреса API существуют в разных блоках сервера в конфигурации, cook ie не отправляется с запросами, и балансировщик нагрузки распределяет последующие вызовы API на альтернативный сервер, на котором сеанс не аутентифицирован. Я использую несколько блоков серверов из-за разных сертификатов SSL, используемых для разных доменов. Я подтвердил, что если я использую поддомен в том же блоке сервера, повар ie будет отправлен правильно, но если я переместлю поддомен в свой собственный блок сервера со всеми остальными конфигурациями, идентичными, то повар ie не сможет отправить.
Публикация (очищенная) nginx Конфигурация блока сервера ниже. Почему это может быть неудачным и что я могу сделать, чтобы решить это? Я пробовал ряд вещей, связанных с CORS, в том числе: https://gist.github.com/Stanback/7145487 все безуспешно.
Nginx блок сервера:
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2;
root /var/www/domain-name;
index index.html index.php;
server_name my.domain-name.com.au my1.domain-name.com.au demo.domain-name.com.au api1.domain-name.com.au api2.domain-name.com.au api3.domain-name.com.au;
ssl_certificate "/etc/pki/tls/certs/domain-name.com.au.crt";
ssl_certificate_key "/etc/pki/tls/private/domain-name.com.au.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:!MD5:!RC4:!LOW:!MEDIUM:!CAMELLIA:!ECDSA:!DES:!DSS:!3DES:!NULL;
ssl_prefer_server_ciphers on;
# set expiration of assets to MAX for caching
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location ~* \.(eot|css|otf|ttf|woff)$ {
add_header Access-Control-Allow-Origin *;
}
location /api {
try_files $uri $uri/ /api/index.php?/$request_uri;
}
location ~ \.php$ {
# if the file is not there show a error : mynonexistingpage.php -> 404
try_files $uri =404;
# pass to the php-fpm server
fastcgi_pass 127.0.0.1:9000;
# also for fastcgi try index.php
fastcgi_index index.php;
# some tweaking
fastcgi_param CI_ENV production;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php =404;
proxy_cookie_path / "/; HTTPOnly; Secure";
}
error_page 404 /404/index.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}