【2022争霸赛*干货满满】Nginx详解安装配置以及应用实例
  

SANGFOR_HZ 19353人觉得有帮助

{{ttag.title}}
Nginx详解安装配置以及应用实例


一、Nginx简介
         
        Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯。
        Nginx支持高并发连接,官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多。

二、Nginx优点

   (1)Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.2.6稳定版已经于2012年12月11日发布,[1]1.3.10开发版已经于2012年12月25日发布,如果新建站点,建议使用最新稳定版作为生产版本,已有站点升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。
    (2)Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
    (3)Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。
    (4)Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

三、Nginx安装配置

       Nginx的官方网站是http://nginx.org/cn/,英文主页为http://nginx.net,从这里可以获得Nginx的最新版本信息。Nginx有三个版本:稳定版、开发版和历史稳定版。开发版更新较快,包含最新的功能和bug的修复,但同时也可能会遇到新的bug,开发版一旦更新稳定下来,就会被加入稳定版分支中。然而有些新功能不一定会被加到旧的稳定版中去。稳定版本更新较慢,但是bug较少,可以作为生产环境的首选,因此通常建议使用稳定版。历史稳定版本为以往稳定版本的汇总,不包含最新的功能。这里选择当前的稳定版本nginx-1.6.0作为介绍对象,开始介绍编译安装,具体步骤如下:
    ⑴ 在安装Nginx之前,确保系统已经安装了pcre-devel软件库。因此,先安装该库文件,把光盘挂在上安装。
//挂在光盘
[root@huangzhong ~]# mount /dev/cdrom /media/cdrom
//使用yum进行安装
[root@huangzhong Packages]# yum install pcre-devel-7.8-6.el6.x86_64.rpm
    ⑵ 安装libevent库文件
//解压安装包
[root@huangzhong ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src/
//进入解压后目录下进行编译
[root@huangzhong ~]# cd /usr/local/src/libevent-2.0.21-stable/
[root@huangzhong libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent
//执行make和make install
[root@huangzhong libevent-2.0.21-stable]# make && make install
//编辑/etc/ld.so.conf.d/libevent.conf指明/usr/local/libevent/lib路径
[root@huangzhong lib]# vim /etc/ld.so.conf.d/libevent.conf
//编辑完后重新加载读取
[root@huangzhong lib]# ldconfig
//查看是否生效
[root@huangzhong lib]# ldconfig -pv |grep libevent
    ⑶ 安装配置nginx
//解压安装包
[root@huangzhong ~]# tar -zxvf nginx-1.6.0.tar.gz -C /usr/local/src/
//进入解压后的目录进行编译
[root@huangzhong lib]# cd /usr/local/src/nginx-1.6.0/
[root@huangzhong nginx-1.6.0]# ./configure \
> --conf-path=/etc/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --http-log-path=/var/log/nginx/access.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/lock/nginx.lock \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_flv_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --http-client-body-temp-path=/var/tmp/nginx/client/ \
> --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
> --with-pcre   //这些参数可以用help帮助,也可以到官网上看样例。
//执行make和make install
[root@huangzhong nginx-1.6.0]# make && make install
//为了能够启动服务因此要把控制脚本放到搜索路径去,因此要编辑/etc/profile文件
[root@huangzhong nginx]# vim /etc/profile
//重新读取该文件
[root@huangzhong nginx]# . /etc/profile
//测试有没有语法错误
[root@huangzhong ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] getpwnam("nginx") failed
nginx: configuration file /etc/nginx/nginx.conf test failed
从上面看出现错误,原因是没有创建用户和组
//创建用户和组
[root@huangzhong ~]# groupadd -r nginx
[root@huangzhong ~]# useradd -r -g nginx nginx
//由于编译过程中指明了/var/tmp/nginx/client/目录和/var/tmp/nginx/proxy/目录,因此要创建这两个目录。
[root@huangzhong ~]# mkdir -pv /var/tmp/nginx/client
[root@huangzhong ~]# mkdir -pv /var/tmp/nginx/proxy
//启动nginx服务,并查看端口
[root@huangzhong ~]# nginx
[root@huangzhong ~]# netstat -tupln |grep nginx
tcp       0      0 0.0.0.0:80         0.0.0.0:*         LISTEN      10868/nginx   //这显示端口号为80表明nginx已经启动
//通过网页进行访问,看nginx是否成功,结果如下:

到此nginx整个安装配置已经完成。

四、Nginx应用实例

1、地址虚拟主机
(1)基于IP地址的虚拟主机
① 实例要求:
192.168.2.100  /usr/local/nginx/html  主站点  ​www.tyedus.com
192.168.2.101    /usr/local/nginx/tec 技术部门  tec.tyedus.com
② 设施:
由于nginx已经搭建成功,所以直接编辑/etc/nginx/nginx.conf文件,编辑结果如下:
复制第36行到67行,然后在68行粘贴,然后进行编辑,编辑内容如下:
//添加一个IP地址
[root@huangzhong ~]# ifconfig eth0:0 192.168.2.101
//创建主目录
[root@huangzhong ~]# mkdir /usr/local/nginx/tec
//然后在主目录下创建一个测试网页
[root@huangzhong tec]# echo "tec hello !!! " > index.html
然后打开C盘下windows/system32/Drivers/etc目录下hosts文件,然后把192.168.2.100   www.tyedus.com和192.168.2.101   tec.tyedus.com加入该文件中。
③ 测试:
在windows下ping ​www.tyedus.com​ 和tec.tyedus.com查看ping的结果如下图所示:
也可以通过网页进行测试。
(2)基于端口的虚拟主机
① 要求:
192.168.2.100 /usr/local/nginx/html 主站点  ​www.tyedus.com​  80
192.168.2.100  /usr/local/nginx/tec 技术部门  ​www.tyedus.com​  800
② 实施:
//去掉IP地址
[root@huangzhong tec]# ifconfig eth0:0 down
//编辑配置文件
[root@huangzhong tec]# vim /etc/nginx/nginx.conf
//关闭nginx,然后重新启动
[root@huangzhong tec]# pkill -9 nginx
[root@huangzhong tec]# nginx
③ 测试
通过网页访问进行测试,首先访问​www.tyedus.com​  80,访问结果如下:
然后访问​www.tyedus.com​  800结果如下:

2、站点安全
(1)实施环境:Centos 64为,PC机
2)案例要求:
现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。
(3)实施拓扑图:
根据实施的要求使用绘图工具绘制出网络拓扑图,如下图所示:
(4)案例实施:
案例的实施大致可以按照以下步骤实施:
① 来源控制
//编辑配置文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
②身份验证:
//编辑配置文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
//因为在上面编辑时用到了账号库,因此接下来创建账号库。
//查看账号库htpasswd所在的位置
[root@huangzhong html]# which htpasswd
/usr/bin/htpasswd   //显示出了账号所在的位置
//查看账号库所属的软件包
[root@huangzhong html]# rpm -qf `which htpasswd`
httpd-tools-2.2.15-26.el6.centos.x86_64  //显示出账号库所属的软件包
//所以安装httpd-tools工具
[root@huangzhong ~]# yum install httpd-tools
//创建账号和密码
//查看账号库文件的内容
[root@huangzhong ~]# cd /usr/local/nginx/         
[root@huangzhong nginx]# cat .htpasswd
user1:UHtXM2qrLL2Dk
user2:BCsopVrG9Su3E   //已创建的账号和密码
③利用非对称加密算法实现加密访问
加密包括非对称加密和对称加密,在上面的加密算法中已提到了两者加密算法的特点,我在这讲的是利用非对称加密算法实现的加密算法,非对称加密算法包括CA的实现和站点证书的生成,具体实现如下操作:
编辑配置文件,操作如下:
//进入配置文件所在的目录下
[root@huangzhong ~]# cd /etc/pki/tls
//查看有没有要找的配置文件
[root@huangzhong tls]# ll
-rw-r--r--. 1 root root 10906 Oct 12  2012 openssl.cnf  //可以看到这个就是我们要找的配置文件
//打开配置文件
[root@huangzhong tls]# vim openssl.cnf
//查看该配置文件内容如下:
打开文件后输入:,进入底行模式,在底行模式下输入set nu     //显示行号,查看需要配置的内容如下:
从上面的配置文件中可以看到首先在/etc/pki/CA目录下创建两个文件index.txt和serial,然后再产生私钥和公钥。
//创建index.txt文件
[root@huangzhong CA]# touch index.txt
//创建serial文件,并给予一个初始值
[root@huangzhong CA]# touch serial
[root@huangzhong CA]# echo "01" >serial
//先产生私钥
[root@huangzhong CA]# openssl  genrsa  1024  >private/cakey.pem
//查看该私钥文件
[root@huangzhong CA]# ll private/cakey.pem
-rw-r--r--. 1 root root 891 May 14 21:37 private/cakey.pem
//查看该私钥的内容
[root@huangzhong CA]# cat private/cakey.pem
//从查看私钥文件可以看出是不安全的,在这里要修改权限
[root@huangzhong CA]# chmod 600 private/cakey.pem
//从私钥中提取产生公钥,操作如下:
编辑完后公钥就产生了导出CA就实现了,接下来就是站点证书以及私钥的产生,操作如下:
//首先创建站点私钥、请求和证书存放目录
[root@huangzhong CA]# mkdir -pv /usr/local/nginx/certs
//产生站点私钥
[root@huangzhong certs]# openssl genrsa 1024 >nginx.key
//生成站点请求文件
//让CA进行颁发证书
[root@huangzhong certs]# openssl ca -in nginx.req -out nginx.cert
//将证书与站点绑定
[root@huangzhong certs]# vim /etc/nginx/nginx.conf
把监听80端口也关闭。
//关闭nginx服务,然后重新启动
[root@huangzhong ~]# pkill nginx
[root@huangzhong ~]# nginx
//查看端口
[root@huangzhong ~]# netstat -tupln |grep nginx
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      1821/nginx  
//通过网页访问,进行安装证书
然后点击安装此证书,然后就完成了。

   (5)测试验证
① 在客户机192.168.2.1上访问该网站,结果如下图:
输入用户名user1和密码123,登陆结果如下:
如果不用user1和user2登陆则显示结果如下:

② 在192.168.2.102机器上访问结果如下:
从上图可以看出只允许192.168.2.1的机器访问,其他机器不允许访问。

打赏鼓励作者,期待更多好文!

打赏
21人已打赏

hnsangfor 发表于 2022-10-21 23:45
  
楼主分享的案例很实用,具有典型性,希望有更多这样的干货供我们学习参考,非常感谢!
新手595921 发表于 2022-10-23 09:39
  
楼主的文章图文并茂,清晰易懂,看完这波操作可以轻松上手了,如遇到问题再向楼主请教~
沧海 发表于 2022-10-23 11:21
  
学习一下,感谢楼主分享
科思哲 发表于 2022-10-23 12:34
  
学习一下,感谢楼主分享!!!!
怪兽君 发表于 2022-10-23 16:00
  
学习一下,感谢楼主分享
এ塔铃独语别黄昏এ 发表于 2022-10-23 17:37
  
学习一下,感谢分享!!!!!!
阿Q 发表于 2022-10-23 19:27
  
果然是高手在民间,楼主帖子写的不错,很有参考价值,还想看更多精彩分享,期待楼主下一篇好帖!
山东_朱文鑫 发表于 2022-10-23 20:57
  
有助于学习!!!!!!!!!!!!!!!!1
飞翔的苹果 发表于 2022-10-24 08:13
  
学习一下,感谢楼主分享!!!!
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
技术笔记
干货满满
技术咨询
新版本体验
产品连连看
功能体验
标准化排查
自助服务平台操作指引
GIF动图学习
2023技术争霸赛专题
通用技术
运维工具
信服课堂视频
秒懂零信任
技术晨报
用户认证
社区帮助指南
答题自测
深信服技术支持平台
安装部署配置
上网策略
SDP百科
设备维护
每日一记
项目案例
玩转零信任
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
测试报告
日志审计
问题分析处理
流量管理
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人