N台vps作前端,安装Nginx使用proxy_cache到一台安装nginx+litespeed+wordpressvps 内存256M的4个网站
前端nginx站点conf配置,部分内容还在检查中,
1 |
<pre class="wrap:true lang:default decode:true "> |
server {
listen 80;
server_name www.baidu.com baidu.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_set_header Accept-Encoding ''; //网站有时访问变空白,加上这个让后端不要返回压缩
1 |
<pre class="wrap:true lang:default decode:true "> |
#让网址自动加www
if ($host ~* ^([a-z0-9]+\.com)$) {
set $host_with_www www.$1;
rewrite ^(.*)$
http://$host_with_www$1 permanent;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
client_max_body_size 8m;
1 |
<pre class="wrap:true lang:default decode:true "> |
set $wordpress_auth "";
if ($http_cookie ~* "wordpress_logged_in_[^=]*=([^%]+)%7C") {
set $wordpress_auth wordpress_logged_in_$1;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
set $cache_key $scheme$host$uri$is_args$args;
1 |
<pre class="wrap:true lang:default decode:true "> |
#wp-admin|wp-login.php直接pass
1 |
<pre class="wrap:true lang:default decode:true "> |
location ~* ^/(wp-admin|wp-login.php)
{
proxy_pass http://to;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
#设置静态文件过期时间,设置23小时主要是为了让宇宙访问都本地缓存久点
location ~ .*\.(avi|bz2?|css|gif|ttf|woff|gz|ico|jpe?g|js|mp3|mpe?g|ogg|png|rar|svg|zip)$ {
proxy_pass http://to;
expires 23h;
proxy_cache main;
# proxy_cache_key $cache_key;
proxy_cache_valid 200 301 302 304 1d;
proxy_cache_valid any 5m;
access_log off;
}
location / {
# if (!-f $request_filename) {
proxy_pass http://to;
# break;
# }
1 |
<pre class="wrap:true lang:default decode:true "> |
#上面的三个#符号,作为前端不要加,我一个wordpress使用cos-html-cache插件出现Welcome to nginx前期我拜读的文章部分说是检查 proxy_cache但我使用后检查的目录文件
1 |
<pre class="wrap:true lang:default decode:true "> |
# if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)\?[0-9]+$") {
# expires 1d;
# break;
# }
1 |
<pre class="wrap:true lang:default decode:true "> |
#上面这段也可以放这里,是规范部分文件带有”js?453453453”让它也能有过期时间,但上面已经有了所以我注释掉
proxy_cache main;
proxy_cache_key $cache_key;
proxy_cache_valid 200 302 17h;
proxy_cache_valid 301 304 1d;
proxy_cache_valid any 5m;
proxy_cache_use_stale error
timeout
invalid_header
http_500
http_502
http_504
http_404;
proxy_cache_bypass $wordpress_auth; # Do not cache the response.
proxy_no_cache $wordpress_auth; # Do not serve response from cache.
}
1 |
<pre class="wrap:true lang:default decode:true "> |
location ~ /\.ht {
deny all;
}
}
1 |
<pre class="wrap:true lang:default decode:true "> |
1 |
<pre class="wrap:true lang:default decode:true "> |
后端nginx+litespeed运行4个wordpress,为了减少conf的数量,我的内容让一个文件直接proxy到litespeed
还是使用80端口共享的方法,litespeed运行在127.0.0.1:80然后nginx的网站配置如下:
1 |
<pre class="wrap:true lang:default decode:true "> |
server {
listen ip:80; ##你的公网IP
server_name ~^(www\.)?(.+)$;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_set_header Accept-Encoding '';
if ($host ~* ^([a-z0-9]+\.com)$) {
set $host_with_www www.$1;
rewrite ^(.*)$
http://$host_with_www$1 permanent;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
client_max_body_size 8m;
1 |
<pre class="wrap:true lang:default decode:true "> |
set $wordpress_auth "";
if ($http_cookie ~* "wordpress_logged_in_[^=]*=([^%]+)%7C") {
set $wordpress_auth wordpress_logged_in_$1;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
set $cache_key $scheme$host$uri$is_args$args;
1 |
<pre class="wrap:true lang:default decode:true "> |
location ~* ^/(wp-admin|wp-login.php)
{
proxy_pass http://127.0.0.1:80;
}
1 |
<pre class="wrap:true lang:default decode:true "> |
location ~ .*\.(avi|bz2?|css|gif|ttf|woff|gz|ico|jpe?g|js|mp3|mpe?g|ogg|png|rar|svg|zip)$ {
proxy_pass http://127.0.0.1:80;
expires 23h;
proxy_cache main;
# proxy_cache_key $cache_key;
proxy_cache_valid 200 301 302 1d;
#proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
access_log off;
}
location / {
#root /home/wwwroot/$2/html; 这个没作深入检查了,使用和不使用没作深入毕竟我四个wordpress使用cache插件不一样,我尝试过加出现过$2变量不工作。
1 |
<pre class="wrap:true lang:default decode:true "> |
#这里和前端的conf不同,可以使用,但要注意
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:80;
break;
}
# if ($request_uri ~* "\.(avi|bz2?|css|gif|woff|gz|ico|jpe?g|js|mp3|mpe?g|ogg|png|rar|svg|zip)\?[0-9]+$") {
# access_log off;
# expires 1d;
# break;
# }
proxy_cache main;
proxy_cache_key $cache_key;
proxy_cache_valid 200 302 17h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 2m;
proxy_cache_use_stale error
timeout
invalid_header
http_500
http_502
http_504
http_404;
proxy_cache_bypass $wordpress_auth; # Do not cache the response.
proxy_no_cache $wordpress_auth; # Do not serve response from cache.
}
location ~ /\.ht {
deny all;
}
}
为什么会有上面的配置?
主要是因为购买了好几个国家的vps,硬件和国内访问的速度有各有千秋,而且我又不想每个vps安装一个wordpress,这样加重了维护的时间,所以我把wordpress全部安装在一个vps上,然后让每个wordpress网站都能有一个独立IP,所以使用了nginx的proxy来实现。那样好处多,但也浪费钱,还有你跑wordpress的vps最好稍微要硬件好点,前端的vps国内链接速度快点,后端访问不行的话,前端互补了这个问题,
我的后端是一台256M的vps,如果我同时维护wordpress的时候litespeed会timeout主要是因为发布内容时我的一个线程lsphp5内存占用51m,采集使用两线都100多了,不卡死也慢死,所以我不会同时多线程采集内容。
以上的配置,没经过任何测试,只是用来跑跑每天10个IP的站点,请各位看官,多提建议。还有就是Mysql的问题,这个还没作优化,等有空再去研究了。