设为首页 收藏本站
查看: 1064|回复: 0

[经验分享] Nginx详解安装配置以及应用实例

[复制链接]

尚未签到

发表于 2018-11-13 10:09:12 | 显示全部楼层 |阅读模式
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
DSC0000.jpg

  //重新读取该文件
  [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是否成功,结果如下:
DSC0001.jpg

  到此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文件,编辑结果如下:
DSC0002.jpg

  复制第36行到67行,然后在68行粘贴,然后进行编辑,编辑内容如下:
DSC0003.jpg

  //添加一个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的结果如下图所示:
DSC0004.jpg

  也可以通过网页进行测试。
  ⑵ 基于端口的虚拟主机
  ① 要求:
  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
DSC0005.jpg

  //关闭nginx,然后重新启动
  [root@huangzhong tec]# pkill -9 nginx
  [root@huangzhong tec]# nginx
  ③ 测试
  通过网页访问进行测试,首先访问www.tyedus.com  80,访问结果如下:
DSC0006.jpg

  然后访问www.tyedus.com  800结果如下:
DSC0007.jpg

2、站点安全
  (1)实施环境:Centos 64为,PC机
  (2)案例要求:
  现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。
  (3)实施拓扑图:
  根据实施的要求使用绘图工具绘制出网络拓扑图,如图4所示:
DSC0008.jpg

  图4:网络拓扑图
  (4)案例实施:
  案例的实施大致可以按照以下步骤实施:
  ① 来源控制
  //编辑配置文件
  [root@huangzhong ~]# vim /etc/nginx/nginx.conf
DSC0009.jpg

  ②身份验证:
  //编辑配置文件
  [root@huangzhong ~]# vim /etc/nginx/nginx.conf
DSC00010.jpg

  //因为在上面编辑时用到了账号库,因此接下来创建账号库。
  //查看账号库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
  //创建账号和密码
DSC00011.jpg

  //查看账号库文件的内容
  [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     //显示行号,查看需要配置的内容如下:
DSC00012.jpg

  从上面的配置文件中可以看到首先在/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
  //从私钥中提取产生公钥,操作如下:
DSC00013.jpg

  编辑完后公钥就产生了导出CA就实现了,接下来就是站点证书以及私钥的产生,操作如下:
  //首先创建站点私钥、请求和证书存放目录
  [root@huangzhong CA]# mkdir -pv /usr/local/nginx/certs
  //产生站点私钥
  [root@huangzhong certs]# openssl genrsa 1024 >nginx.key
  //生成站点请求文件
DSC00014.jpg

  //让CA进行颁发证书
  [root@huangzhong certs]# openssl ca -in nginx.req -out nginx.cert
  //将证书与站点绑定
  [root@huangzhong certs]# vim /etc/nginx/nginx.conf
DSC00015.jpg

  把监听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
  //通过网页访问,进行安装证书
DSC00016.jpg

  然后点击安装此证书,然后就完成了。
  ⑸ 测试验证
  ① 在客户机192.168.2.1上访问该网站,结果如下图:
DSC00017.jpg

  输入用户名user1和密码123,登陆结果如下:
DSC00018.jpg

  如果不用user1和user2登陆则显示结果如下:
DSC00019.jpg

  ② 在192.168.2.102机器上访问结果如下:
DSC00020.jpg

  从上图可以看出只允许192.168.2.1的机器访问,其他机器不允许访问。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634450-1-1.html 上篇帖子: nginx php 502 bad gateway一例解决方法 下篇帖子: Nginx设置多条件判断访问控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表