nginx 这个轻量级、高性能的 web server 主要可以干两件事情:
1、直接作为http server(需要Fastcgi配合);
2、作为反代服务器(进一步可以实现均衡负载)。
这里主要利用一下反功能来方便一下日常生活。选择Gravatar当例子是因为尼玛我发现了我这的移动把Gravatar整站都墙了,还有hostloc也是移动访问困难。
#update2016.01.11:反代Google想偷懒可以使用我的一键包
一、Nginx反代超详细教程:Nginx安装和基本操作
1、可以使用一键包安装,最火的应该是军哥的一键包了吧(http://lnmp.org),不过如果使用一键包都不包下面的两个第三方模块,想添加第三方模块可以参照下面的教程编译一个nginx替换,至于原来的nginx参数可以通过命令nginx -V
查看。
2、我选择手动安装,毕竟我只需要nginx,而且也用不到军哥为了方便而顺带编译进去的模块。
我的VPS没有绑定V6的IP地址,V6模块我也省了,还有1.9.5以下不支持http2,不要加入--with-ngx_http_v2_module
这个参数,没有这个模块会导致configure失败。
wget http://nginx.org/download/nginx-1.8.0.tar.gz #可以根据你的喜好选择版本号
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
git clone https://github.com/FRiCKLE/ngx_cache_purge
tar xzf nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/nginx \ #nginx安装位置
--conf-path=/usr/local/nginx/conf/nginx.conf \ #nginx配置文件路径
--user=www --group=www \
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log \ #日志路径
--pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock \
--with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--add-module=/root/ngx_http_substitutions_filter_module \ #文本替换模块
--add-module=/root/ngx_cache_purge #缓存模块
make && make install
3、如果在执行以上命令遇到./configure: error: the HTTP rewrite module requires the PCRE library.错误提示。
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
tar xzf prce-8.37.tar.gz
cd prce-8.37
./configure
make&&make install
其实编译的时候各种奇葩情况都有,不懂就百度。不过好像百度比较辣鸡!辣鸡!辣鸡!
4、增加用户和用户组(好像不增加也没什么问题)。
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
5、修改Nginx配置文件(可省略),需要注意的是从源安装的Nginx的配置文件在/etc/nginx
在nginx.conf的http层加入以下内容:
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
#临时文件目录
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:5m inactive=7d max_size=1g;
#5m为内存占用,1g为最大硬盘占用,cache_one为缓存区名字,如果修改则下文的配置亦要相应修改。
include vhost/*.conf; #导入conf目录中vhost目录里的所有以conf为后缀的文件,这样我们可以把虚拟主机的配置文件分散到单独文件中,方便修改
对了,别忘了新建目录,否则启动nginx的时候会提示目录不存在
mkdir /home/cache/path -p
mkdir /home/cache/temp
chmod 777 -R /home/cache
6、此时可以运行nginx了。
/usr/local/nginx/sbin/nginx
7、每次修改完都要先检测一下配置文件有没有错。
/usr/local/nginx/sbin/nginx -t
8、热重载(不中断服务)。
/usr/local/nginx/sbin/nginx -s reload
二、Nginx反代超详细教程:Nginx基本反向代理
1、nginx.conf里边有这么一句include conf.d/*.conf
,但是一键包用多了,我习惯放在vhost里边,我基本会修改成include vhost/*.conf
。
2、直接到vhost目录新建一个conf文件,下面是一个基本反代的配置文件例子。
server{
listen 80;
server_name g.32.pm;#server_name是你绑定的域名
location /avatar { #绑定到 uri,例如我这里是 //g.32.pm/avatar 反代https://secure.gravatar.com/avatar
proxy_pass https://secure.gravatar.com/avatar; #你需要反代的网站
}
}
3、反代Gravatar头像照抄上面就可以了。
4、反代Google有点特殊的,proxy_pass改成google还不行,还要设置Header,不过有个问题:用的人多了就有可能会被Google判断为机器人从而出现验证码,这时候可以使用upstream解决。往http层加入upstream代码。至于如何寻找Google的IP,问Google去吧。
upstream google.com {
server 223.255.227.156:80 max_fails=3;
server 223.255.227.157:80 max_fails=3;
server 223.255.227.158:80 max_fails=3;
server 223.255.227.159:80 max_fails=3;
}
server {
listen 80;
server_name g.32.pm;
location / {
proxy_pass http://www.google.com;
proxy_set_header Host www.google.com;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Referer http://www.google.com;
}
}
5、至于最后一个例子就是标题提到的全球主机交流论坛(hostloc),也是和上面的一样。
三、Nginx反代超详细教程:反向代理优化
1、大多数人Gravatar都不会经常修改,但是上面的配置是每次访问都要通过VPS访问一次Gravatar源站,这样效率就明显不足了,这时候就体现了缓存的作用了。
先往HTTP层加入Cache设定:参考这里
server{
listen 80;
server_name g.32.pm;
location / {
proxy_pass https://secure.gravatar.com/;
#告诉后端你的真实IP
proxy_cache cache_one;#cache空间名字
proxy_cache_valid 200 304 3d;
proxy_cache_key $host$uri$is_args$args;
expires 10d;
#网上照抄的缓存设定
}
}
2、经常登录各种DZ论坛的肯定都知道DZ登录会提示你登录IP的变化情况,如果你是直接照着上面的基本配置反代的话,无论谁通过你的反代访问hostloc,都会提示IP变成了你的VPS的IP,那怎么告诉后端服务器你的IP呢,nginx恰好有这么个参数传递IP的。建议反代都加上(需要服务器支持,没观察过 LOC)。
server{
listen 80;
server_name 不能告诉你;
location / {
proxy_pass http://www.hostloc.com/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#告诉后端你的真实IP
}
}
3、加入SSL功能,SSL加密通信可以减少非法反代(例如Google镜像)被墙的可能性(想啥呢,该被墙还是会被墙)。
server {
listen 443;
server_name g.32.pm;
if ($host = 'www.g.32.pm') {
rewrite ^/(.*)$ https://g.32.pm$1 permanent;
#统一www域名到不带www域名
}
ssl_certificate /root/ssl/crt.crt;
ssl_certificate_key /root/ssl/crt.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
#网上照抄的SSL参数
location / {
proxy_redirect off;
proxy_pass https://www.google.com/;
proxy_set_header Host www.google.com;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Referer http://www.google.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
4、使用subs_filter优化请求。
这是后你访问你的Google镜像还会存在直接访问google.com请求,你可以使用F12中网络部分或者Fiddle查看,这里不阐述了,教程百度都有。
如果你时按照上面的教程做的话,那么subs_filter模块肯定装好了,直接翻回去看。
往location层加入filter语句即可
server {
location / {
proxy_set_header Accept-Encoding "";#关闭Gzip是subs_filter能正常工作
proxy_pass https://www.google.com/;
subs_filter www.google.com g.32.pm;
}
}
subs_filter详细用法在这里:https://github.com/yaoweibin/ngx_http_substitutions_filter_module
国外IP可以利用反代网易云音乐吗?没搞懂反代
可以啊,网易云没限制国外IP不能访问啊。不过不限制IP访问你为什么要反代呢
我是想WP博客使用网易云音乐插件,国内主机可以用,外国不行了
那只能用国内的反代了
这个功能挺好用的,至少Gravatar头像可以出来了~
其实不用自己配置,找别人能看见头像的用一下就行了,例如我的,还支持https呢
好详细,我仅仅用来做外网访问内网资源的代理
还没学会用。
我现在用的就是nginx的,但是没有做反向代理。
问个小问题:
我反代中文维基百科,可区别电脑和移动设备。测试一切正常。
但是,ipad上却不能访问,非得切换到桌面网站才能访问,应该是桌面和移动设备的判断有误,请教如何解决?
没有IPAD ,你自己慢慢调试吧,要在nginx那只要检测到ipad的ua就转跳到桌面版网站
瞅瞅
现在是香港饭袋openshift吗
你回复的时候是的,但是现在是香港反代香港
过来看看、新站混个脸熟
一看到代码就头疼