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使用经验的人参考...