目的
通过使用nginx反向代理多个服务器上的后台服务,达到对外域名发布,对内负载的功能。要求:使用hosts中修改的ip与域名的映射关系,访问www.wg.cn能访问服务,如下:
一、准备
1、hosts配置
修改机器上的hosts文件,增加以下信息:
在cmd中使用ipconfig /flushdns
使修改生效。
2、后台服务准备
之前做过的一个视频播放服务的管理页面作为本次测试的后台服务,通过在不同机器上部署视屏播放服务的登录管理来测试nginx的反向代理功能。
我在虚拟机1和虚拟机2上部署了登录管理服务,并且服务已经启动。
二、nginx反向代理配置
整个nginx的安装过程不再详细说明,具体安装过程查看 nginx编译安装 ,配置文件路径/usr/local/nginx/conf
,nginx.conf中13、14、15行为模块化配置的一部分,同样在路径/usr/local/nginx/conf
下。
下面配置中涉及到具体IP地址的后一位均使用x代替(虽然是虚拟机)
1、nginx.conf
的配置信息:
user nginx nginx; ## Default: nobody
worker_processes 5; ## Default: 1
error_log logs/error.log;
pid logs/nginx.pid;
worker_rlimit_nofile 8192;
events {
# use [ kqueue | epoll | /dev/poll | select | poll ];
use epoll;
worker_connections 4096; ## Default: 1024
}
http {
include /usr/local/nginx/conf/mime.types;
include /usr/local/nginx/conf/proxy.conf;
# include /usr/local/nginx/conf/fastcgi.conf;
index index.html index.htm index.php;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
upstream proxy_service {
server 172.20.36.4x:8080 max_fails=2 fail_timeout=30s ;
server 172.20.36.4x:8080 max_fails=1 fail_timeout=30s ;
}
server {
listen 80;
server_name wg.cn www.wg.cn;
access_log logs/wg.access.log main;
location / {
proxy_pass http://proxy_service;
}
}
}
nginx配置说明:
a、28行 upstream proxy_service
“上游”模块配置
语法:server address [ parameters ]
默认为轮询方式负载,除此还有:权重负载weight
,权重越大,被访问概率越大;ip_hash负载;fair负载(第三方),按照服务器访问响应时间负载;url_hash负载(第三方),按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例子:
- 权重负载
server 192.168.0.14 weight=3;
server 192.168.0.15 weight=7;
}
- ip_hash 负载
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
- fair负载
upstream backserver {
server server1;
server server2;
fair;
}
- url_hash
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
proxy_service
是upstream
的名称,花括号内简单理解就是负载的服务器列表,29行使用的是轮询负载方式,表示 负载机器1的IP172.20.36.4x:8080,最大失败次数2,失败超时时间30s
b. 33行server配置模块
listen 80; 表示监听的是80端口
server_name 表示 服务的虚拟主机名称为wg.cn www.wg.cn
root和localtion 表示静态文件的路径,虽然在这个地方配置了,但是这个反向代理中并不会使用到,后续我们再用到时仔细研究
2、mime.types
配置信息
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
3、proxy.conf
配置信息
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
三、测试
1、2个后台服务都正常时
- 步骤一 重新加载配置启动nginx:
/usr/local/nginx/sbin/nginx -s reload
- 步骤二 在浏览器地址中输入:
http://www.wg.cn/
- 结果
A.前端页面
B.后台服务日志
2、1个服务宕机,另一个正常时
A.前端页面
B.后台服务日志
3、结论
通过上面2个测试结果的分析,我们达到了nginx反向代理的功能:
a> 对用户不可见的服务
b> 负载均衡
参考引用:
nginx中gzip配置
nginx安装及配置