Nginx是一个高性能的http和反向代理服务器,其特点是占用内存小,并发能力强。Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。 ...
一 Nginx简介1.1 什么是Nginx
1.2 反向代理正向代理:在浏览器中配置代理服务器,通过代理服务器进行互联网访问。 反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。 1.3 负载均衡如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。 1.4 动静分离为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。 二 Nginx的安装
2.1 安装pcre依赖
1wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz 登录后复制
1tar -xvf pcre-8.37.tar.gz 登录后复制
1./configure 登录后复制
1make && make install 登录后复制
1pcre-config --version 登录后复制 2.2 安装openssl,zlib等依赖1yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 登录后复制 2.3 安装nginx
安装成功后,在 2.4 启动nginx在 1./nginx 登录后复制 登录后复制 然后浏览器访问服务器ip, 2.5 Nginx常用的命令 使用这些命令时需要进入
1./nginx -v 登录后复制
1./nginx 登录后复制 登录后复制
1./nginx -s stop 登录后复制
1./nginx -s reload 登录后复制 2.6 Nginx的配置文件
1#user nobody; 2worker_processes 1; 3 4#pid logs/nginx.pid; 5 6events { 7 worker_connections 1024; 8} 9 10http { 11 include mime.types; 12 default_type application/octet-stream; 13 14 sendfile on; 15 #tcp_nopush on; 16 17 #keepalive_timeout 0; 18 keepalive_timeout 65; 19 20 #gzip on; 21 22 server { 23 listen 80; 24 server_name localhost; 25 26 location / { 27 root html; 28 index index.html index.htm; 29 } 30 } 31} 登录后复制
1.全局块 从配置文件开始到 1worker_processes 1; 登录后复制 这个代表 2.events块
1worker_connections 1024; 登录后复制 这个代表 3.http全局块
三 Nginx配置反向代理3.1 ngix代理流程本地浏览器访问 3.2 配置ip和域名的绑定关系由于我们的 147.104.xxx.xxx www.javatrip.com 登录后复制 前面的ip是服务器的ip地址,后面的域名是我随便起的用于绑定这个ip的一个域名。配置好之后,我们使用域名访问一下tomcat,如果能请求到 3.3 在nginx配置请求转发 1 server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 root html; 7 index index.html index.htm; 8 } 9 } 登录后复制 我们将以上默认的配置文件做个修改: 1server { 2 listen 80; 3 server_name 47.104.xxx.xxx; 4 5 location / { 6 root html; 7 proxy_pass http://127.0.0.1:8080; 8 index index.html index.htm; 9 } 10} 登录后复制 以上这段配置的意思就是请求是 现在浏览器访问www.javatrip.com,发现直接转发到了 3.4 根据请求后缀分发我们再解压一个 将请求 1server { 2 listen 7001; 3 server_name 47.104.xxx.xxx; 4 5 location ~ /dev/ { 6 proxy_pass http://127.0.0.1:8080; 7 } 8 9 location ~ /prod/ { 10 proxy_pass http://127.0.0.1:8081; 11 } 12} 登录后复制 然后试试效果,分别访问www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果如下: 其中,配置转发的时候用到了~,其含义内容如下:
四 Nginx配置负载均衡4.1 什么是负载均衡负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。 现在我们想实现的效果是通过访问www.javatrip.com:7001/prod/a.html,将请求分别分发到两个tomcat上面去,首先我们在 4.2 配置nginx.conf首先,在 1upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4} 登录后复制 登录后复制 其次,在 1server { 2 listen 80; 3 server_name 47.104.xxx.xxx; 4 5 location / { 6 root html; 7 proxy_pass http://myserver; 8 index index.html index.htm; 9 } 10} 登录后复制 4.3 测试效果访问地址:www.javatrip.com:7001/prod/a.html,多刷新几次。发现有的请求到 4.4 nginx支持的几种负载策略
1upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4} 登录后复制 登录后复制
1upstream myserver{ 2 server 127.0.0.1:8080 weight=1; 3 server 127.0.0.1:8081 weight=2; 4} 登录后复制
1upstream myserver{ 2 ip_hash; 3 server 127.0.0.1:8080; 4 server 127.0.0.1:8081; 5} 登录后复制
1upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4 fair; 5} 登录后复制 由于动静分离在实际开发中也不常用,就不再写了。本篇文章做为一个nginx入门,到这里就基本完结了。最后留给大家一个问题思考一下:如何保证nginx的高可用? |