码迷,mamicode.com
首页 > 其他好文 > 详细

NGINX 反向代理

时间:2014-09-22 11:04:43      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:nginx

一:nginx

     Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器;

作为一款轻量级的Web服务器,具有占有内存少,并发能力强等优势,是高连接并发场景下Apache的不错的替代品;

本篇主要介绍Nginx如何作为Web反向代理服务器.

  特点:非阻塞,调用数据时磁盘i/o的第一阶段,(磁盘加载到内核内存)是非阻塞.

         事件通知机制.通信机制采用epoll模型可以连接众多客户端请求.

         一个MASTER有多个worker,一个worker又可以响应多个用户请求.

二:反向代理服务器

  在计算机网络中,反向代理是代理服务器的一种。它根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端作为代理使用,而不是客户端。

三:定义nginx的基本访问功能

   这里配置包含了定义nginx的虚拟主机,添加压缩选项,访问控制,防盗链,和显示连接状态.

1)全局段采用默认配置我们只需要创建server段

server { 
               listen 80;
               server_name www.a.com;       #定义第一个虚拟主机
               gzip on;                     #对www.a.com 进行压缩
               gzip_http_version 1.0;
               gzip_comp_level 2;
               gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
                gzip_disable msie6;
  location / {                               #家目录
                   root /www/a.com;
                   index index.html index.htm;
                  }

        }
server {
               listen 80 default_server;
               server_name www.b.org;      #定义第二个虚拟主机
               root /www/b.org;
               deny 172.16.16.16;          #拒绝172.16.16.16 这台主机访问
               allow 172.16.0.0/16;        #允许172.1.0.0/16网段的主机进行访问
               deny all;                   #除了上面的网段主机访问然后拒绝所有
    location /admin/
                 {
                     root /www/b.org;            
                     auth_basic "admin area"; #在/admin 下访问要输入密码
                     auth_basic_user_file /etc/nginx/.htpasswd;    #密码文件放置位置
                 }
    location /download/ 
                 {
                      root /www/b.org/;       #在/down创建一个下载站
                      autoindex on; 
                      rewrite ^/download/(.*\.(jpg|gif|jepg|png))$  /images/$1 break;                        #访问/download下的图片时都会把地址重写到一个新的目录里/images/下     
                      rewrite_log on;         #打开重定向日志记录.建议关闭    
    location ~* /.(jpg|png|gif|jpeg)$ 
                 {
                      root /www/b.org;
                      valid_referers none blocak www.b.org *.b.org; 
                      #允许www.b.org的网站进行图片引用
                      if  ($invalid_referer) 
                            {
                               rewrite ^/ http://www.b.org/403.html; 
                               #拒绝其他引用,如果有倒链直接返回403.html
                             }
                 }
     location /server-status 
                     {
                        stub_status on;     
                        #显示连接状态.发起请求数,接受请求数.请求数发起的连接数.
                      }
          }
          
          
2) 生成密码时借助Apache的htpasswd来生成用户名和密码.         
 htpasswd -c -m /etc/nginx/.htpasswd tom   #借助http的密码添加工具添加访问控制用户.
 htpasswd  -m /etc/nginx/.htpasswd tom #第二次添加用户时不用在加上-c选项.

四:实现nginx的负载均衡

  负载均衡

http
{ 
      include mime.types;
      default_type application/octet-stream;
      sendfile on; 
      #keepalive_timeout 0; 
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 ;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/ 
                     
                          server 172.16.16.4 weight=1 ;    
                            
                       }



 server
       {
              listen 80;
              server_name www.c.net;
           
      location /
                      {
                          proxy_pass http://webserver/;
                        
                          proxy_set_header X-Real-IP $remote_addr; 
                          #显示真实访问主机的IP地址.
                       }
            
   




在被代理的主机上要修改http.conf的配置文件,后可以查看真正主机的访问地址而不是代理服务器的地址.
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #添加{X-Real-IP}i %信息 
查看日志记录: tail -f /var/log/httpd/access_log

五:nginx的状态检测

http
{ 
      include mime.types;
      default_type application/octet-stream;
      sendfile on; 
      #keepalive_timeout 0; 
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                        
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/ 
                     
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;    
                            #能够自动检测后面的服务是否正常运行.
                     
                          server 127.0.0.1:8080 backup; 
                             #定义没有后端服务时会出现个维护页面.
                            
                       }



 server
       {
              listen 80;
              server_name www.c.net;
           
      location /
                      {
                          proxy_pass http://webserver/;
                        
                          proxy_set_header X-Real-IP $remote_addr; 
                          #显示真实访问主机的IP地址.
                       }
  server                                             #定义维护页面         
       { 
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        }

六:nginx页面缓存

http
{ 
      include mime.types;
      default_type application/octet-stream;
      sendfile on; 
      #keepalive_timeout 0; 
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                        
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/ 
                     
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;    
                            #能够自动检测后面的服务是否正常运行.
                     
                          server 127.0.0.1:8080 backup; 
                             #定义没有后端服务时会出现个维护页面.
                            
                       }

 proxy_cache_path /cache/webserver levels=1:2 keys_zone=web:100m max_size=1g inactive=12h; #定义缓存服务.

 server
       {
              listen 80;
              server_name www.c.net;
           
      location /
                      {
                          proxy_pass http://webserver/;
                          proxy_set_header X-Real-IP $remote_addr; 
                          #显示真实访问主机的IP地址.
                          proxy_cache web;               #缓存服务名字
                          proxy_cache_valid 200 2h;      #200的缓存2小时
                          proxy_cache_valid 301 302 10m; #301,302缓存10分钟
                          proxy_cache_valid any 1m;      #其他缓存1分钟
                       }
  server                                             #定义维护页面         
       { 
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        }


七:nginx的URL的重写

bubuko.com,布布扣

2)修改nginx配置文件

http
{ 
      include mime.types;
      default_type application/octet-stream;
      sendfile on; 
      #keepalive_timeout 0; 
      keepalive_timeout 65;
      upstream webserver    #实现负载均衡.
                      {
                          server 172.16.16.1 weight=3 max_fails=1 fail_timeout=3;   
                     #负载均衡代理  后面的server 修改为  proxy_pass http://webserver/ 
                     
                          server 172.16.16.4 weight=1 max_fails=1 fail_timeout=3;    
                            #能够自动检测后面的服务是否正常运行.
                     
                          server 127.0.0.1:8080 backup; 
                             #定义没有后端服务时会出现个维护页面.
                      }

 proxy_cache_path /cache/webserver levels=1:2 keys_zone=web:100m max_size=1g inactive=12h; #定义缓存服务.

 server
       {
              listen 80;
              server_name www.c.net;
              add_header X-Cache $upstream_cache_status;
      location /
                      {
                          proxy_pass http://172.16.16.1/;#反向代理制172.16.16.1/服务器下.
                          proxy_cache web;               #缓存服务名字
                          proxy_cache_valid 200 2h;      #200的缓存2小时
                          proxy_cache_valid 301 302 10m; #301,302缓存10分钟
                          proxy_cache_valid any 1m;      #其他缓存1分钟
                          proxy_set_header X-Real-IP $remote_addr; 
                          #显示真实访问主机的IP地址.
                       }
            
      location ~* \.(jpg|jpeg|png|gif)$       
              {           
                    proxy_pass http://172.16.16.4;  #图片代理至16.4服务           
                    proxy_cache web;           
                    proxy_cache_valid 200 2h;           
                    proxy_cache_valid 301 302 10m;           
                    proxy_cache_valid any 1m;       
                    }         
       } 

  server                                             #定义维护页面         
       { 
                listen 8080;                         #定义监听端口为8080
                server_name 127.0.0.1;
                root /www/backup;
        } 
 
}


本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1556758

NGINX 反向代理

标签:nginx

原文地址:http://slayer.blog.51cto.com/4845839/1556758

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!