免责声明:我已将这个问题发布在 Stackoverflow 上,因为我认为它可能更适合那里。如果有人想在那里回答,问题的链接如下。
--
我有以下内容:
domain.com - 许多 URL 不需要 SSL(我想使用 Varnish 来缓存所有这些 URL)domain.com/shop - 所有 URL 都应该使用 SSL(不需要 Varnish,我想监听 443 端口)
我基本上是在寻找配置服务器的最佳方式,以缓存所有不需要 SSL 的 uri,因为这必须在端口 443 上运行。所有端口 8080 请求都将发送到 Varnish 并正常工作。此外,我想确保将非 SSL 请求发送到 domain.com(包括 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;
}
}
答案1
尝试端口分配:
Varnish:80 => NginX:8080
NginX:443
这样,您将所有内容都通过 varnish 作为缓存层,因此对 NginX 的请求数量就会减少。
您的应用程序应该通过标头控制如何缓存内容,默认情况下它应该可以正常工作 - 动态文件被传递给 NginX,而静态文件则从缓存中提供,持续时间与标头所说的有效期相同。
答案2
我们可以这样做。我使用此模式为“管理”页面启用 SSH(在 WordPress 中)。希望它能适用于您的情况。
服务器 { 听 8080; 服务器名称域名.com; 根/路径/到/域名.com/安装; 索引索引.php; 位置 ~ \.php$ { # 请求通过 HTTPS 访问 /shop 位置 ~ /商店 { 返回 301 https://$host$request_uri; } # 处理非 /shop PHP 请求 尝试文件$uri =404; 包括 fastcgi_params; fastcgi_index索引.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; } 地点 / { 尝试文件$uri $uri/ /index.php; } } 服务器 { 听443 ssl; 服务器名称域名.com; ssl_证书xyz.crt; ssl_certificate_key xyz.key; 根/路径/到/域名.com/安装; 索引索引.php; # 仅处理购物请求 位置 ~ /商店 { 位置 ~ \.php$ { 尝试文件$uri =404; 包括 fastcgi_params; fastcgi_index索引.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/dev/shm/php-fpm-www.sock; fastcgi_param HTTPS 开启; } } # 将其他所有内容重定向到端口 80 (Varnish) 地点 / { 返回 301 http://$host$request_uri; } }