Nginx反代超详细教程:加速网站Google、Gravatar和Hostloc

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以下的版本不要加入--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、增加用户和用户组(好像不增加也没什么问题,估计安装nginx的时候会按照配置参数添加的吧)。

  • /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头像照抄上面就可以了。

Nginx反代超详细教程:加速网站Google、Gravatar和Hostloc 1
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;
  • }
  • }

反代Google,Google镜像Nginx反代超详细教程:加速网站Google、Gravatar和Hostloc 2
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的。建议反代都加上

  • 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

最后

文章出自:Ryan 快快跑 Nginx反代超详细教程:加速网站Google、Gravatar和Hostloc,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享