我有一个启用了 PHP APC 缓存的 Wordpress 网站,我想加密对 和 的所有请求http://www.domain.com/wp-login.php*
。http://www.domain.com/dashboard?action=profile
我想强制对其他所有内容建立未加密的连接。
我可以让它工作,但配置非常丑陋,而且乱七八糟。我的问题是我仍然必须将我想要加密的两个字符串传递给 PHP 引擎。一定有更好的方法来做到这一点,而不是重复这么多。
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/new/server.crt;
ssl_certificate_key /etc/nginx/ssl/new/server.key;
server_name www.domain.com domain.com;
root /var/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \wp-login.php.* {
##Stuff to send requests to the PHP engine here
}
location ~ \dashboard?action=profile.* {
##Stuff to send requests to the PHP engine here
}
location ~ \.php$ {
##Stuff to send requests to the PHP engine here
}
}
server {
listen 80;
server_name www.domain.com domain.com;
root /var/www;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \wp-login.php.* {
##Stuff to send requests to the PHP engine here
}
location ~ \dashboard?action=profile.* {
##Stuff to send requests to the PHP engine here
}
location ~ \.php$ {
##Stuff to send requests to the PHP engine here
}
location ~ \dashboard/\?action\=profile$ {
rewrite ^ https://$http_host$request_uri? permanent;
}
location ~ \wp-login.php.* {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
答案1
至于需要 SSL 才能登录和访问仪表板,有多种解决方案。一个简单的方法是编辑wp-config.php
并在显示添加的行上方/* That's all, stop editing! Happy blogging. */
添加define('FORCE_SSL_ADMIN', true);
。
就我个人而言,我并不担心滥用 https 版本的网站,因为搜索引擎默认会链接到非 https 版本的网站,所以除非您的用户定期登录,否则只有一小部分人会使用 https 版本的网站,因此服务器负载的增加可以忽略不计,但 YMMV。
你可能会在 Ars Technica 的这篇文章中找到很多建议,Web Served,第 5 部分:您自己的博客,有用。
您可能还想查看常见配置陷阱在 nginx.org。
答案2
为了避免 nginx 在位置块中重复,可以使用 nginx 包含或使用嵌套位置块 - 嵌套位置块示例如下...
location / {
proxy_pass http://mywebfeservers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Request-ID $uuid;
proxy_set_header Via $via;
location /aaa {
# proxy_pass is not inherited, unsure about proxy_http_version
proxy_pass http://mywebfeservers;
proxy_http_version 1.1;
# Prevent caching
if_modified_since off;
}
}
这里所有位置都设置了这些不同的标头。只有 /aaa 位置可以防止缓存,但它仍然使用相同的标头而不重复配置。遗憾的是,您必须重复代理传递,因为继承不适用于代理传递指令(出于我不知道的原因)。