Отказ от ответственности: я разместил это в Stackoverflow, и я подумал, что он может там лучше подойти. Ссылка на вопрос находится ниже, если кто-то хочет там ответить.
-
Имею следующее:
domain.com - многие URL-адреса, для которых не нужен SSL (я бы хотел использовать Varnish для кеширования всего этого) domain.com/shop - все URL-адреса должны использовать SSL (Varnish не нужен, я бы хотел прослушивать порт 443)
Я в основном ищу лучший способ настроить сервер для кеширования всех uris, которые не нуждаются в SSL, поскольку он должен работать на порту 443. Все запросы порта 8080 отправляются на Varnish и работают правильно. Кроме того, я хочу убедиться, что на domain.com отправляется не-ssl-запрос (включая запросы www). Я делал это раньше, но по какой-то причине SSL в уравнении все усложняет.
Моя конфигурация следующая:
`server {
listen 8080;
server_name domain.com;
root /var/www/domain.com/public_html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/dev/shm/php-fpm-www.sock;
# Tried using to shut off http on all non SSL needed urls.
fastcgi_param HTTPS off;
}
}
server {
listen 443 ssl;
server_name domain.com;
ssl_certificate /etc/nginx/keys/www.domain.com.chained.crt;
ssl_certificate_key /etc/nginx/keys/domain.com.key;
access_log /var/www/domain.com/logs/access.log ;
error_log /var/www/domain.com/logs/error.log ;
root /var/www/domain.com/public_html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/dev/shm/php-fpm-www.sock;
#https will not work without this.
fastcgi_param HTTPS on;
}
}
Попробуйте выделить порт:
Varnish:80 => NginX:8080
NginX:443
Таким образом, вы передаете все через лак как слой над кешем, поэтому количество запросов к NginX сокращается.
Ваше приложение должно контролировать через заголовки, как содержимое должно кэшироваться, и по умолчанию оно должно работать нормально - динамические файлы передаются в NginX, а статические файлы обслуживаются из кеша до тех пор, пока это указано в заголовке даты истечения срока действия.
Вот как мы могли это сделать. Я использую этот шаблон для включения SSH для страниц администратора (в WordPress). Надеюсь, это сработает в вашей ситуации.
server { listen 8080; server_name domainname.com; root /path/to/domainname.com/installation; index index.php; location ~ \.php$ { # Request to /shop to go via HTTPS location ~ /shop { return 301 https://$host$request_uri; } # Process non-/shop PHP requests try_files $uri =404; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; } location / { try_files $uri $uri/ /index.php; } } server { listen 443 ssl; server_name domainname.com; ssl_certificate xyz.crt; ssl_certificate_key xyz.key; root /path/to/domainname.com/installation; index index.php; # Process only the requests to shop location ~ /shop { location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; fastcgi_param HTTPS on; } } # Redirect everything else to port 80 (Varnish) location / { return 301 http://$host$request_uri; } }