博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx的介绍以及编译安装详解
阅读量:5902 次
发布时间:2019-06-19

本文共 8506 字,大约阅读时间需要 28 分钟。

                       Nginx的介绍以及编译安装详解

                                                  作者:尹正杰   

版权声明:原创作品,谢绝转载!否则将追究法律责任。 

 

 

一.Nginx(全称”engine x“)诞生背景
  apache主要优点是功能丰富且足够稳定,但是其并发效果并不是很理想。还记得我们上次说的MPM模型吗?其中有一种模型是“prefork”模型,它的优点就是一个进程只相应一个请求。所以当web服务器需要处理1W个并发的话就需要1W个进程,我们假设每个进程只需要2M的空间的话,那么平均下来只响应1W个请求就得20G的物理内存啊。所以,早期的web服务器如果访问并发过万的话服务就会自动崩掉。这就是传说中的“C10K”问题。后来Apache有推出了2.4版本的中的”event“模型来解决这个并发问题。与此同时,也诞生了其他类型的应用服务器来解决这个问题,比如:lighttpd(支持lua语言,属于轻量级服务,豆瓣早期就是用的就是它),Nginx(全称”engine x“)。
 
二.Nginx特性
1.基本功能
  a>..静态资源的web服务器,能缓存打开的文件描述符;
  b>.反向代理服务器,可以缓存,负载均衡,以及后端服务器的状态检测功能;
  c>.可以支持FastCGI协议,典型代表就是LNMP网络架构;
  d>.模块化非DSO机制,支持多种过滤器,比如gzip,SSI和图形大小调整等;
  e>.支持SSL等等;
2.扩展功能
  a>.基于名称和IP做虚拟主机;
  b>.支持keepalive;
  c>.支持平滑配置更新或程序版本升级;
  d>.支持定制访问日志,支持使用日志缓存以提高性能;
  e>.支持URL rewrite;
  f>.支持路径别名;
  g>.支持基于IP及用户的认证;
  h>.支持速率限制,并发限制等;
  我们可以用一句话概括Nginx特性:它是一个非阻塞模型,支持事件驱动,它是一个master进程和多个worker进程,一个worker可以响应多个用户请求。
 

 

三.Nginx的基本架构

 

  一个master进程生产多个worker进程,当然也有人说生成了多个worker线程。当然这个对于Linux来说是没有什么太大区别的,我们知道Linux原生不支持线程,在Linux中,线程也被叫做轻量级进程。有可能你会问为什么Linux不支持线程,因为Linux进程本身就已经很轻量了啊。Linux进程比起其他的操作系统来讲以及轻量很多了。但是,为了兼容更多的线程本身的特性,Linux本身也有自己的线程库用于实现轻量级进程。所以,我们可以说Linux所有进程都是以进程的方式来管理的,master可以生成多个worker进程,至于生成多少个我们可以自行配置。worker的进程个数一般取决于CPU的物理核心数。一般而言,worker进程数应该小于物理CPU的核心数(降低进程切换的可能性),因为操作系统的运行也是需要占用CPU的核心数的。

 

  Nginx是基于事件驱动机制来进行工作的。而支持事件驱动的方式有kqueue,epoll和/dev/poll;同时也支持消息通知如select,poll,rt signals;也支持sendfile和sendfile64;也支持文件的AIO机制(异步I/O);还支持mmap等功能。

 

 

四.Ngin的模块类别

 

1.核心模块

 

2.标准http模块

 

3.可选的http模块

 

4.邮件模块

 

5.第三方扩展模块(需要下载并重新编译)
 
 

 

 
五.Nginx的安装方式
1.rpm方式安装:
  下载地址:(根据自己的操作系统选择适合你的RPM包程序)
2.yum方式安装
  下载地址:(需要手动指定epel源)
3.编译方式安装
  编译安装是我们推荐的安装方式,因为每个公司的对nginx的用法也不同,所以我们需要定制化安装需要Nginx支持的功能。当然,在编译安装的试试,我们难免要解决依赖环境的问题。接下来我们一起来源码安装一下Nginx吧。
a>.安装依赖环境
[root@yinzhengjie nginx-1.12.2]# yum -y install gcc pcre-devel openssl-devel zlib-devel
b>.下载Nginx
[root@yinzhengjie ~]# mkdir -p /yinzhengjie/application/nginx && cd /yinzhengjie/application/nginx/
[root@yinzhengjie nginx]# wget
[root@yinzhengjie nginx]# ll
总用量 964
-rw-r--r--+ 1 root root 981687 10月 17 21:20 nginx-1.12.2.tar.gz
[root@yinzhengjie nginx]# tar -xf nginx-1.12.2.tar.gz
[root@yinzhengjie nginx]# cd nginx-1.12.2
[root@yinzhengjie nginx-1.12.2]#
c>.查看configure帮助信息
[root@yinzhengjie nginx-1.12.2]# ./configure --help | less
--prefix=PATH #指定Nginx的安装路径
--sbin-path=PATH #指定Nginx核心程序的安装路径
--conf-path=PATH #指定Nginx主配置文件nginx.conf的路径
--error-log-path=PATH #指定错误日志文件路径
--pid-path=PATH #指定pid文件路径
--lock-path=PATH #指定nginx.lock文件的路径
--user=USER #指定用户运行worker进程
--group=GROUP #指定组运行worker进程
--http-log-path=PATH #指定Nginx访问日志的路径
--with-http_ssl_module #加载ssl模块(用于支持https)
--with-http_flv_module #加载流媒体(flash)
--with-http_stub_status_module #加载网页状态的模块
--with-http_gzip_static_module #加载压缩模块,能够实现页面压缩功能
--http-client-body-temp-path=PATH #处理http请求是,如果请求包体需要临时暂存在磁盘上时,我们需要给其指定一个暂存路径
--http-proxy-temp-path=PATH #这个参数是跟缓存相关的,Nginx作为反向代理服务器时,上游服务器(Real Server,简称RIP)产生的http包体需要临时存放的临时目录
--http-fastcgi-temp-path=PATH #fastcgi是一种对CGI的扩展,指定转发FCGI服务器时临时使用文件的存放目录
--http-uwsgi-temp-path=PATH #uwsgi是反向代理用户对于python开发的web服务器协议,这个参数也是指定临时存放文件的目录,uwsgi也是一种对于CGI的扩展
--http-scgi-temp-path=PATH #scgi也是对于CGI的扩展,相比上面两种扩展,只是扩展方式不同而已,该参数也是指定存放临时文件的目录
--without-pcre #
。。。。(and so on)
[root@yinzhengjie nginx-1.12.2]#
 
d>.配置Nginx需要安装的模块
1 [root@yinzhengjie nginx-1.12.2]# groupadd  -r nginx2 [root@yinzhengjie nginx-1.12.2]# useradd -r -g nginx nginx3 [root@yinzhengjie nginx-1.12.2]# mkdir -p /yinzhengjie/application/Nginx/tmp4 [root@yinzhengjie nginx-1.12.2]# ./configure --prefix=/yinzhengjie/application/Nginx  --sbin-path=/yinzhengjie/application/Nginx/sbin/nginx --conf-path=/yinzhengjie/application/Nginx/conf/nginx.conf --error-log-path=/yinzhengjie/application/Nginx/log/error-log --http-log-path=/yinzhengjie/application/Nginx/log/access.log --pid-path=/yinzhengjie/application/Nginx/nginx.pid --lock-path=/yinzhengjie/application/Nginx/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/yinzhengjie/application/Nginx/tmp/client --http-proxy-temp-path=/yinzhengjie/application/Nginx/tmp/proxy --http-fastcgi-temp-path=/yinzhengjie/application/Nginx/tmp/fcgi --http-uwsgi-temp-path=/yinzhengjie/application/Nginx/tmp/uwsgi --http-scgi-temp-path=/yinzhengjie/application/Nginx/tmp/scgi --with-pcre | tee /yinzhengjie/application/nginx/nginx.out5 [root@yinzhengjie nginx-1.12.2]#
d>.编译
[root@yinzhengjie nginx-1.12.2]# make -j 4
e>.安装
[root@yinzhengjie nginx-1.12.2]# make install
f>.配置软连接
1 [root@yinzhengjie ~]# ln -s  /yinzhengjie/application/Nginx/sbin/nginx /usr/sbin/nginx 2 [root@yinzhengjie ~]#  3 [root@yinzhengjie ~]# which nginx 4 /usr/sbin/nginx 5 [root@yinzhengjie ~]#  6 [root@yinzhengjie ~]# nginx -h 7 nginx version: nginx/1.12.2 8 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] 9 10 Options:11   -?,-h         : this help12   -v            : show version and exit13   -V            : show version and configure options then exit14   -t            : 测试主配置文件是否有语法错误的。15   -T            : test configuration, dump it and exit16   -q            : suppress non-error messages during configuration testing17   -s signal         #向主进程发信号的一个参数,可以平滑升级或是停止服务等操作。18   -p prefix     : set prefix path (default: /yinzhengjie/application/Nginx/)19   -c filename   : 指定配置文件,默认配置文件是: /yinzhengjie/application/Nginx/conf/nginx.conf20   -g directives : set global directives out of configuration file21 22 [root@yinzhengjie ~]#
g>.配置Nginx启动脚本
1 [root@yinzhengjie ~]# more /etc/init.d/nginx  2 #!/bin/bash 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 #EMAIL:y1053419035@qq.com 6 #chkconfig: 2345 89 89 7  8 #Description:This is Nginx web script" 9 10 PID="/yinzhengjie/application/Nginx/nginx.pid"11 12 start(){13         /yinzhengjie/application/Nginx/sbin/nginx14         if [ $? -eq 0 ];then15                 echo -en "Starting Nginx...\t\t\t["16                 echo -en "\033[32;34mOK\033[0m"17                 echo "]"18         else19                 echo "Starting Nginx Error"20         fi21 }22 23 stop(){24         /yinzhengjie/application/Nginx/sbin/nginx -s stop25         if [ $? -eq 0 ];then26                 echo -en "Stop Nginx...\t\t\t["27                 echo -en "\033[32;34mOK\033[0m"28                 echo "]"29         else30                 echo "Stop Nginx Error"31         fi32 }33 34 status(){35         if [ -f $PID ];then36                 ID=$(cat $PID)37                 echo "Ngix($ID) is running..."38         else39                 echo "Nginx is stop"40         fi41 }42 case $1 in43     start)44         start45         ;;46     stop)47         stop48         ;;49     restart)50         stop51         start52         ;;53     status)54         status55         ;;56     *)57         echo "Usage:$0 {start|stop|restart|status}"58 esac59 [root@yinzhengjie ~]# chmod +x /etc/rc.d/init.d/nginx
h>.配置Nginx的开机自启
[root@yinzhengjie ~]# chkconfig --add nginx
[root@yinzhengjie ~]# chkconfig nginx on
[root@yinzhengjie ~]# chkconfig nginx --list
nginx 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@yinzhengjie ~]#
i>.检查Nginx是否启动
[root@yinzhengjie ~]# service nginx start
Starting Nginx... [OK]
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# ps -ef | grep nginx
root 6253 1 0 13:45 ? 00:00:00 nginx: master process /yinzhengjie/application/Nginx/sbin/nginx
nginx 6254 6253 0 13:45 ? 00:00:00 nginx: worker process
root 6262 6047 0 13:48 pts/0 00:00:00 grep nginx
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 6253 root 6u IPv4 1730240 0t0 TCP *:http (LISTEN)
nginx 6254 nginx 6u IPv4 1730240 0t0 TCP *:http (LISTEN)
[root@yinzhengjie ~]#
 
4.配置Nginx的语法高亮
文件下载地址:
[root@yinzhengjie ~]# mkdir -p .vim/syntax
[root@yinzhengjie ~]# cd .vim/syntax/
[root@yinzhengjie syntax]# ll
总用量 0
[root@yinzhengjie syntax]# rz
rz waiting to receive.
zmodem trl+C ȡ
 
100% 28 KB 28 KB/s 00:00:01 0 Errors
 
[root@yinzhengjie syntax]# ll
总用量 32
-rw-r--r--. 1 root root 29542 11月 5 13:56 nginx.vim
[root@yinzhengjie syntax]# cd ..
[root@yinzhengjie .vim]#
[root@yinzhengjie .vim]# echo "au BufRead,BufNewFile /yinzhengjie/application/Nginx/conf/*,/usr/local/nginx/conf/* if &ft == '' | setfiletype nginx | endif " > filetype.vim
[root@yinzhengjie .vim]# ll
总用量 12
drwxr-xr-x. 4 root root 4096 9月 16 10:16 bundle
-rw-r--r--. 1 root root 127 11月 5 14:04 filetype.vim
drwxr-xr-x. 2 root root 4096 11月 5 14:00 syntax
[root@yinzhengjie .vim]#
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/yinzhengjie/p/7787940.html

你可能感兴趣的文章
Mysql 常用语句
查看>>
MySQL修改root密码的多种方法
查看>>
echarts在.Net中使用实例(二) 使用ajax动态加载数据
查看>>
前端MVC学习总结(三)——AngularJS服务、路由、内置API、jQueryLite
查看>>
[QT]简单介绍一下 *.pro、*.pri、*.prf、*.prl等四种文件
查看>>
xss---攻击
查看>>
c++ 编译时检测结构体大小的的宏定义写法
查看>>
人物评价
查看>>
Unable to load the Wrapper's native library because none of the following files及解决方法
查看>>
执行sql出现No Dialect mapping for JDBC type: -9错误
查看>>
制作.bat文件运行指定目录的.bat或者exe
查看>>
查看java进程启动的详细参数和过程
查看>>
Android -- RecyclerView实现顶部吸附效果
查看>>
MySQL之乱码问题解决详解
查看>>
Selenium Web 自动化 - 项目持续集成(进阶)
查看>>
java&javaweb学习笔记
查看>>
UML统一建模语UML2和EnterpriseArchitect
查看>>
C#编程(二十二)----------继承的类型
查看>>
【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)...
查看>>
在 Visual Studio 2017 中找回消失的“在浏览器中查看”命令
查看>>