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;#你需要反代的网站
- }
- }
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;
- }
- }
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