问题是要求让nginx 有条件地将请求重定向到其他服务器(通过反向代理)或自行处理请求。
以下是详细信息。
我有一个Raspberry Pi(RPi)在家里运行nginx + wordpress 24 * 7。我也有一台笔记本电脑每晚运行Ubuntu大约5个小时。
RPi上的wordpress工作得很好,但速度很慢(尤其是当它处理php时)。所以我想让笔记本电脑帮忙:
我想知道是否有可能实现这一目标?如果是,如何配置RPi和Ubuntu?
答案 0 :(得分:2)
基本的解决方案是,将nginx作为带有fail_timout的反向代理,当它收到请求时,它会调度到Ubuntu具有更高优先级的上游,如果Ubuntu处于脱机状态,RPi将自行处理该请求。 / p>
这需要:
以下是配置的详细信息。
注意,在我的配置中:
<强> Mysql的强>
在bind-address = 192.168.1.100
中设置/etc/mysql/my.cnf
,并确保未定义skip-networking
;
在mysql的控制台中为RPi和Ubuntu授予权限:
grant all on minewpdb.* to 'mineblog'@'192.168.1.100' identified by 'xxx';
grant all on minewpdb.* to 'mineblog'@'192.168.1.100' identified by 'xxx';
<强> WordPress的强>
正确设置DB_HOST:
define('DB_NAME', 'minewpdb');
define('DB_USER', 'mineblog');
define('DB_PASSWORD', 'xxx');
define('DB_HOST', '192.168.1.100');
<强> NFS 强>
在RPi上,安装nfs-kernel-server,然后按/etc/exports
/path/to/wordpress 192.168.1.101(rw,no_root_squash,insecure,sync,no_subtree_check)
要在RPi上启用nfs服务器,还需要rpcbind:
sudo service rpcbind start
sudo update-rc.d rpcbind enable
sudo service nfs-kernel-server start
在Ubuntu上,挂载nfs(它也应该在/ etc / fstab中设置以使其自动挂载)
sudo mount -t nfs 192.168.1.100:/path/to/wordpress /path/to/wordpress
<强> Nginx的强>
在RPi上,使用以下参数创建一个新的配置文件/etc/nginx/sites-available/wordpress-load-balance
:
upstream php {
server unix:/var/run/php5-fpm.sock;
}
upstream mineservers {
# upstreams, Ubuntu has much higher priority
server 192.168.1.101:8000 weight=999 fail_timeout=5s max_fails=1;
server 192.168.1.100:8000;
}
server {
listen 80;
server_name mine260309.me;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name mine260309.me;
ssl_certificate /path/to/cert/cert_file;
ssl_certificate_key /path/to/cert/cert_key_file;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
access_log /path/to/wordpress/logs/proxy.log;
error_log /path/to/wordpress/logs/proxy_error.log;
location / {
# reverse-proxy to upstreams
proxy_pass http://mineservers;
### force timeouts if one of backend is died ##
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
### Set headers ####
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
### Most PHP, Python, Rails, Java App can use this header ###
#proxy_set_header X-Forwarded-Proto https;##
#This is better##
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;
### By default we don't want to redirect it ####
proxy_redirect off;
}
}
server {
root /path/to/wordpress;
listen 8000;
server_name mine260309.me;
... # normal wordpress configurations
}
在Ubuntu上,它可以使用相同的配置文件。
现在RPi的nginx服务器在端口443上收到任何请求,它被分派到Ubuntu或RPi的端口8000,其中Ubuntu具有更高的优先级。如果Ubuntu处于脱机状态,RPi本身也可以处理请求。
欢迎任何评论!