我对仅在 https 上运行的 WordPress 站点的服务器块(使用 nginx 和 W3TC 浏览器缓存)有以下疑问。
环境:
Ubuntu——14.04LTS
nginx——1.4.6
PHP - 5.5.9
mysql - 版本 14.14 发行版 5.5.41
我的问题如下:
- “位置”部分的顺序重要吗?
- W3TC 块的顺序重要吗?
- 我见过有人在 listen 指令中放置“ssl”而不是使用“ssl on;”——这有关系吗?
- 我在顶级服务器块中处理 www => 非 www,但我没有明确解决http://域名.com=>https://domain.com (强制 SSL)——但它不知何故为我做到了这一点。有什么想法为什么它能工作,即使我没有告诉它?我很高兴它能工作,我只是想了解它为什么能工作。
- 任何有关设置的一般建议也都值得赞赏。谢谢!
虚拟主机配置:
服务器 { 服务器名称www.domain.com; 永久重写 ^(.*) https://domain.com$1; } 服务器 { 听443默认服务器; 服务器名称域名.com; 根/usr/share/nginx/html/domain.com; 索引 index.php index.html index.htm; # BEGIN W3TC 浏览器缓存 开启 gzip; gzip_types 文本/css 文本/x-component 应用程序/x-javascript 应用程序/javascript 文本/javascript 文本/x-js 文本/richtext 图像/svg+xml 文本/纯文本/xsd 文本/xsl 文本/xml 图像/x-icon; # 结束 W3TC 浏览器缓存 ssl 开启; ssl_证书/etc/ssl/certs/domain.com.rapidssl.crt; ssl_certificate_key /etc/ssl/private/domain.com.key; ssl_会话_超时5分钟; ssl_协议SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 或 HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers开启; 地点 / { try_files $uri $uri/ /index.php?q=$uri&$args; } 错误页面 404 /404.html; 错误页面 500 502 503 504 /50x.html; 位置 = /50x.html { 根目录/usr/share/nginx/html; } 位置 ~ \.php$ { 尝试文件$uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index索引.php; 包括 fastcgi_params; } }
答案1
请不要在一个问题中发布多个问题。
当你不知道某件事情是如何运作的时候,第一步是搜索文档。对于 nginx,指令通过以下链接详尽解释:官方文件指令索引。
这取决于位置块的性质。前缀位置块的顺序并不重要,但正则表达式位置块的顺序很重要,因为将选择第一个与请求 URI 匹配的位置块。
配置指令的顺序无关紧要,除了
if
块等少数情况外。Gzip 指令不属于这些情况。事实上
ssl on
这是旧方法,而 listen 指令参数ssl
是新方法。使用ssl on
强制服务器块仅接受 HTTPS,而使用 listen 指令参数允许在同一个服务器块中同时处理 HTTP 和 HTTPS。实际上,您明确要求 nginx 执行此操作。获得相同结果的另一种方法是使用
return 301 https://domain.com$request_uri
。重写模式^(.*)
匹配所有 URI 并捕获它们。然后它将它们永久重写(301 重定向)为https://domain.com<uri>
。请参阅文档如果您感到困惑,请了解重写指令的工作原理。基于观点的问题不符合 SF 标准。