Nginx几种用法

nginx的核心功能有如下几种:
1.http 可以用来做web服务器和反向代理服务器
2.mail 可以用来当做邮件服务器
3.stream 用来做负载均衡
我们来演示以下nginx的几种用法

nginx反向代理

nginx反向代理有两种模式:
1.第一种是后端服务器为httpd+php模块实现的,就是nap(nginx+httpd/php_module),在这个环境中,后端服务器是httpd,监听端口默认为80,nginx是作为httpd的客户端存在的,当用户发来请求时,nginx接收用户请求,然后读取用户请求,并判断用户的请求数据,根据用户的请求重新生成新的请求发送到相应的后端服务器
实现步骤:
(1)环境:nginx服务器172.16.200.102,后端ap(httpd+php)服务器172.16.104。先关闭每台虚拟机上的iptables 和selinux
(2)配置反向代理服务器

[root@localhost ~]# yum -y install nginx    #安装nginx
[root@localhost ~]# rpm -qi nginx              #这里使用的版本为1.10.2版本的nginx
[root@localhost ~]# service nginx start      #开启nginx
Name        : nginx                        Relocations: (not relocatable)
Version     : 1.10.2                            Vendor: Fedora Project
...
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
    删除两个listen条目中的defalut_server,default表示当前server为默认的server。将这个文件中的default_server删除,再去指定我们要创建的新server为默认server,要不会提示有重复的default配置
  listen       80 ;
  listen       [::]:80;
[root@localhost ~]# vim /etc/nginx/conf.d/nap.conf    #nginx配置文件http段默认包含/etc/nginx/conf.d/*.conf文件,我们就在这个文件中写一个server段
server {
        listen 80 default;    #监听80端口
        server_name www.feng.com;   #默认域名
        location / {
        index index.php index.html
        }
        location ~* \.html$ {                 #将.html结尾的页面请求到本地直接处理
        root /usr/share/nginx/html
        }
        location ~* \.php$ {
                proxy_pass http://172.16.200.104;    #使用proxy_pass模块来将请求发送到后端服务器172.16.200.104,注意,反向代理不是直接转发请求的,而是经过处理后自己重新发送请求包给后端服务器的,所以叫做代理,和调度不是一样的。locattion 后边是正则匹配时,proxy_pass 后边的URL最后一定不能加/,不然会报错。
        }
}
[root@localhost ~]# nginx -t    #测试配置文件是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# nginx -s reload    #配置文件没问题后就重载配置文件,让刚才写入的server生效
[root@localhost conf.d]# echo "172.16.200.102 index.html" > /usr/share/nginx/html/index.html    #修改主页文件,清楚的显示当前页面是哪个

(3)配置后台服务器

[root@localhost html]# yum -y install httpd php   #安装httpd和php
[root@localhost html]# vim /var/www/html/index.php    #编写测试页面,加入以下内容
<?php
phpinfo();
?>

(4)测试
使用浏览器访问172.16.200.102/index.php页面,看到php状态页面,证明实验成功

2.第二种是nginx加上php-fpm来实现的,php-fpm具有一定的web服务功能,可以直接使用php-fpm来当作动态内容服务器
(1)实验环境,代理服务器为172.16.200.102,后端服务器为172.16.200.103.接上一个实验的环境,将nap.conf中的listen行的default删掉。
(2)还是在102服务器上/etc/nginx/conf.d目录下,重新创建个文件np.conf,在这个文件中创建一个新的server

[root@localhost conf.d]# vim np.conf
server {
        listen 80 default;
        server_name www.feng.com;
        location / {
                index index.php index.html;
        }
        location ~* \.html$ {
                root /usr/share/nginx/html;
        }
        location ~* \.php$ {
                fastcgi_pass 172.16.200.103:9000;
                fastcgi_index index.php;    #后端服务器的主页
                fastcgi_param SCRIPT_FILENAME /app/html$fastcgi_script_name;    #由于后台服务端是php-fpm服务,不能直接传递客户的访问信息,所以用这个参数来传递匹配到的内容到后台服务端。
                include fastcgi_params;    #fastcgi_params文件设置了很多参数,不需要我们再去写入,直接将文件包含进去即可。
        }
}
[root@localhost conf.d]# nginx -t
[root@localhost conf.d]# nginx -s reload

(3)配置后端服务器

[root@localhost html]# yum -y install php-fpm
[root@localhost html]# vim /etc/php-fpm.d/www.conf   #到配置文件中设置
listen = 9000    #监听端口设为监听所有网卡的9000端口
listen.allowed_clients = 172.16.200.102    #允许访问的客户端,设置为反向代理服务器ip

设置完成后,就可以启动了

[root@localhost html]# service php-fpm start
Starting php-fpm:                                          [  OK  ]
[root@localhost html]# ss -tnlp|grep 9000
LISTEN     0      128                       *:9000                     *:*      users:(("php-fpm",3488,7),("php-fpm",3489,0),("php-fpm
",3490,0),("php-fpm",3491,0),("php-fpm",3492,0),("php-fpm",3494,0))

写一个测试文件,对应代理服务器中的指定位置

[root@localhost html]# mkdir -p /app/html
[root@localhost html]# vim /app/html/index.php
<?php
phpinfo();
?>

(4)测试
用浏览器访问172.16.200.102/index.php,出现测试页面,证明实验成功

nginx缓存

nginx的缓存功能在反向代理段中实现,我们在第一个实验的nap.conf文件中加入缓存的内容,再次将np.conf文件中的default换到nap.conf中
缓存存储的方式为key/values,key是将指定的URL段经过hash后,成为等长度的字符串,存放在内存中。而values就是URL对应的内容了,存放在磁盘上的规划好的目录中,目录结构是由hash完的key值的从后往前数几位为一个目录结构所构成的,比如设置目录结构levels=2:1:1,那么第一层目录就是hash值的后两个字符组成,每个字符有16位,2个字符就是256位,以此类推。
1.在/etc/nginx/nginx.conf中定义缓存,注意只能写在http段中,写在全局段中会报错

[root@localhost nginx]# vim /etc/nginx/nginx.conf
proxy_cache_path /data/ levels=2:1:1 keys_zone=procache:10m;

2.引用缓存
又回到nap.conf文件中,引用刚才定义的缓存,修改到.php$的location段,加入以下内容

 proxy_cache procache;   #应用主配置文件中定义的缓存,procache是在主配文件中定义的缓存区域名字
 proxy_cache_valid 200 301 302 1h;   #设置响应码的缓存时间
 proxy_cache_use_stale timeout;    #设置后端服务器发生什么错误时缓存还能继续使用。
 proxy_cache_methods GET HEAD;    #设置哪种请求方法才使用缓存。

检查语法并重载配置文件

[root@localhost nginx]# nginx -t
[root@localhost nginx]# nginx -s reload

3.验证
在浏览器中访问http://172.16.200.102/index.php,多访问两次,然后查看定义的目录中有没有生成子目录,生成证明缓存成功:

[root@localhost nginx]# tree /data/
[root@localhost nginx]# tree /data
/data
├── 59
│   └── f
│       └── b
│           └── 49bbcf840980a010f6e71e9fb70bbf59
├── 6b
│   └── 7
│       └── e
│           └── 9265fb1fcece376063e2b462a4c7e76b
└── 8e
    └── e
        └── 1
            └── d19be2f40be92a1508d8bd9f56271e8e

缓存成功

调度,负载均衡

nginx 可以使用两种调度方式:

  • 一种是7层调度,原理也是代理的原理,不过就是将功能相同的一类后端主机设置成一个组,然后将请求报文发送至这个组。组内就定义有调度算法,再去调度至某一个节点。
  • 另一种就是像lvs一样的4层调度,通过ip加端口直接转发请求,这种调度不能识别7层数据包,所以不能再去通过URL等方式去调度了,功能相对单一。但是由于是4层调度,所以各种TCP协议的数据包都可以通过这个功能来转发了。
7层调度

7层调度的功能还是通过http方式,所以是定义再http上下文中的,需要先定义再去使用:
1.实验环境:调度器172.16.200.102,后端服务器172.16.200.104和172.16.200.105。后端服务器都安装httpd
2.定义
到主配置文件/etc/nginx/nginx.conf中,再http上下文中添加如下内容

upstream app {
        server 172.16.200.104  weight=1 max_fails=5 fail_timeo
ut=5s;        server 172.16.200.105  weight=1 max_fails=5 fail_timeo
ut=5s;        }
}

3.调用
在nap.conf文件中location段中将proxy_pass 后将URL中的ip地址设置为主配置文件中定义的分组名称

location ~* \.php$ {
                proxy_pass http://app;
               ....
}

4.在172.16.200.104和172.16.200.105中添加测试文件

[root@localhost html]# echo "172.16.200.104" > /var/www/html/i
ndex.php    #104主机中添加
[root@localhost html]# echo "172.16.200.105" > /var/www/html/i
ndex.php    #105主机中添加

5.测试
用浏览器访问172.16.200.102,不断刷新,或者写一个简单的for循环for i in {1..10};do curl 172.16.200.102;done就获取到172.16.200.104和105两个地址,交替出现,因为默认为rr模式,我们也没有给权重。

4层调度

4层调度是在主配置文件中stream{}上下文中定义的,和7层相似,先将功能相同的主机分成一个组,在组中指定算法,然后在server中将监听的端口指定,就可以转发了,我们这里转发ssh协议:
1.环境:调度器172.16.200.102,后端主机172.16.200.104和172.16.200.105
2.定义
在主配置文件/etc/nginx/nginx.conf中添加stream上下文,在stream上下文中定义

stream {
        upstream sshsrv {
                server 172.16.200.104:22;
                server 172.16.200.105:22;
                }
        }

3.调用
在定义段下面直接调用,添加以下内容

server {
        listen 22;
        proxy_pass sshsrv;
}

4.关闭sshd服务
172.16.200.102监听20端口,但是sshd服务是开机默认启动的,所以要先关闭原本的sshd服务,不然就会冲突(或者将listen改为别的端口,然后ssh连接时指定端口也可以)

[root@localhost nginx]# service sshd stop

然后检测配置文件,重载配置文件

[root@localhost nginx]# nginx -t
[root@localhost nginx]# nginx -s reload

5.验证
使用一台客户端,用ssh 172.16.200.102连接,上去之后ip a查看Ip地址,可以看到当前地址为172.16.200.104,exit退出后再次连接,看到ip为172.16.200.105,证明实验成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,007评论 0 9
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,217评论 5 124
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,675评论 18 139
  • 愿你阳光下像个孩子,风雨里像个大人。
    DUDUAnuan阅读 576评论 0 0
  • 你好,简书。 今天是一个开始,这个一直在心里蠢蠢欲动的开始。 我手写我心。
    微雨214阅读 168评论 0 0