nginx的虚拟主机和反向代理和一些技巧应用

前言

nginx是什么,一般用来做反向代理,也可以用来放静态htnl等文件..当然代理tcp协议也没啥问题,但做好是别用哈.性能不咋样.

 

虚拟主机

什么是虚拟主机?

    个人理解,比如一台主机装一个nginx,配置端口为80,向外提供服务。如果要配置第二个同样的服务,需要再另外一台主机上安装或者本机在装相同软件(注意本机端口不能重复),同样进行配置。有了虚拟主机功能,我们可以在一台主机上配置N个不同的端口,分别对外提供服务.

上配置:

    

	server {
        listen      801;   #监听端口 
        server_name localhost;  #主机名,如果拥有域名,填上域名,如果有对外提供的IP,填公网IP,localhost代表,只能通过内网访问

        access_log logs/home801.access.log main;  #日志文件
		
		
        
        location / {    #位置,当用户输入wwww.aa.com或ip,或localhost时,匹配的根路径..具体是那个,根据server_name决定
          root html/pc;   #root后面 代表你实际网站存放的相对路径
          index index.html; #默认主页
        }
		

		
        location =/favicon.ico {
          log_not_found off;
          access_log off;
        }

    }

  像这样的一个配置,就是一个虚拟主机,如果配置多个,复制改下参数即可

 

反向代理

什么是方向代理呢?

   个人理解:比如nginx对外提供服务的端口是80,真实的应用却部署在另外的多台主机上,nginx通过client端的访问,把请求转向后端的真实服务器,最后把结果原路返回至client

上配置:

    

    upstream yingyong_proxy {   #上游真实后端地址     
       server 192.168.1.2:80 weight=1;
       server 192.168.1.3:80 weight=1;
       check interval=3000 rise=2 fall=5 timeout=1000;
    }

    #外网虚拟主机
    server {
        listen 80;   #监听端口
        server_name www.aa.com;  #对外提供的域名,如果对内部,就用内网IP,或localhost

        access_log logs/yingyong.access.log main;       

        #重写url
        location =/ {
          rewrite ^ /yingyong last;    #如果你的应用没在根目录但在根目录的子目录,不想用户每次访问输入www.aa.com/yingyong ,就需用到重写.
        }
        
        location /yingyong {     #获取重写位置
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
       proxy_pass http://yingyong_proxy;    #把请求转向真实的后端服务
        }

        location =/favicon.ico {
           log_not_found off;
           access_log off;
        }

    }

   像这样的一个配置,就是一个虚拟主机的反向代理,如果配置多个,复制改下参数即可

 

高级应用,根据pc和iphone导向不同的页面

  #pc和iphone导向不同的页面

    
     upstream index_pc_proxy {       #先定义iphone和pc对应的虚拟主机服务
      server 127.0.0.1:801;
  
    }

       upstream index_mb_proxy {
      server 127.0.0.1:802;

    }
    
    
    server {
        listen      80;
        server_name www.aa.com;

        access_log logs/home.access.log main;
        
        
        if ($http_user_agent  ~* Android|iPhone){   #匹配成功
           set $shouji "index_mb_proxy";        #设置变量
           }

        if ($http_user_agent  !~* Android|iPhone){  #匹配不成功
           set $shouji "index_pc_proxy";   #设置变量
           }
       
        
        location / {
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_pass http://$shouji;     #反向代理
        }

        
        location =/favicon.ico {
          log_not_found off;
          access_log off;
        }

    }

   总结

           适合有nginx使用经验的人参考...

posted @ 2016-06-29 11:25  放在垃圾桶里  阅读(903)  评论(0编辑  收藏  举报