Nginx安装与启动

一 Window环境

1、下载与启动

 1)从nginx官网(http://nginx.org/en/download.html )下载相应的安装包,建议下载稳定版。
 2)将压缩包解压到相应的目录,双击nginx.exe 来启动nginx。
 3)在浏览器地址栏输入:localhost或者127.0.0.1 便能看到 欢迎页面,说明你虚拟主机已经搭建好了

2、启动闪退错误

 1)错误:
  点击nginx.exe时cmd闪退,查看logs目录下的error.log,显示:
2017/10/26 14:43:09 [emerg] 5276#8668: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions
 2)原因:
   在cmd窗口查看端口状态:netstat -aon ,会发现nginx默认端口80端口已被占用,pid为4,被System进程所占用。
 3)解决方法:
   1.打开注册表:regedit
   2.找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP
   3.找到一个REG_DWORD类型的项 Start,将其改为0
   4.重启系统,System进程不会占用80端口

3、启动停止等命令

 1)查看Nginx版本
   nginx -v
 2)启动
   start nginx 或 nginx.exe
   建议使用 start命令,nginx.exe会使cmd窗口一直处于执行中,不能进行其他命令操作。
   启动的时候可以载入配置文件
   start nginx.exe -c conf/default.conf
 3)停止
   nginx.exe -s stop 或 nginx.exe -s quit
   stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关的信息。
 4)重新载入nginx
   nginx.exe -s reload
   当配置信息修改,需要重新载入这些配置时使用此命令。
 5)重新打开日志文件
   nginx.exe -s reopen
 6)测试配置文件
   修改了配置文件后最好检查下修改过的配置文件是否正确,命令如下:
   nginx.exe -t -c conf/default.conf
   结果:nginx: the configuration file F:\nginx/conf/nginx.conf syntax is ok
      nginx: configuration file F:\nginx/conf/nginx.conf test is successful
 7)命令帮助
  nginx.exe -h 或 nginx.exe -?

二 Linux环境

  首先我们需要一个内核Linux2.6及以上版本的操作系统,因为Linux2.6及以上的内核才支持epoll,而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题的。
我们可以使用uname-a命令来查询Linux内核版本。

三 必备软件

1、GCC编译器

 GCC(GNU Compiler Collection)可以用来编译C语言程序。

yum install -y gcc

G++编译器可以用来编写Nginx Http模块

yum install -y gcc-c++
2、PCRE库

  PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)该库支持正则表达式。如果我们再配置文件nginx.conf里使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,Nginx的HTTP模块要靠它来解析正则表达式。
yum install -y pcre pcre-devel

3、zlib库

  zlib库用于对HTTP包的内容组gzip格式的压缩,如果我们再nginx.conf里面配置了 gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。
yum install -y zlib zlib-devel

4、OpenSSL开发库

  如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,也需要安装它。
yum install -y openssl openssl-devel

四 磁盘目录

1、Nginx源代码存放目录

  该目录用于放置从官网上下载的Nginx源码文件,以及第三方或我们自己所写的模块源代码文件。

2、Nginx编译阶段产生的中间文件存放目录

  该目录用于放置在configure命令执行后所生成的源文件及目录,一致make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并房子啊Nginx源代码目录下。

3、部署目录

  该目录存放实际Nginx服务运行期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx

4、日志文件存放目录

  日志文件通常会比较大,当研究nginx的底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件的大小增长的极快,需要预分配一个拥有更大磁盘空间的目录。

五 Linux内核参数优化

  在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态Web内容服务器、反向代理服务器或是提供图片缩略图功能(实时压缩图片)的服务器时,其内核参数的调整都是不同的。这里只针对最通用的、使Nginx支持更多并发请求的TCP网络参数做简单说明。
  首先,需要修改/etc/sysctl.conf来更改内核参数。例如,最常用的配置:

fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog=1024

 然后执行sysctl-p命令,使上述修改生效。
 参数含义
  ·file-max:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直接限制最大并发连接数,需根据实际情况配置。
  ·tcp_tw_reuse:这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接,这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接。
  ·tcp_keepalive_time:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。
  ·tcp_fin_timeout:这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
  ·tcp_max_tw_buckets:这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。
  ·tcp_max_syn_backlog:这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。
  ·ip_local_port_range:这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围。
  ·net.ipv4.tcp_rmem:这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值、默认值、最大值。
  ·net.ipv4.tcp_wmem:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值。
  ·netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
  ·rmem_default:这个参数表示内核套接字接收缓存区默认的大小。
  ·wmem_default:这个参数表示内核套接字发送缓存区默认的大小。
  ·rmem_max:这个参数表示内核套接字接收缓存区的最大大小。
  ·wmem_max:这个参数表示内核套接字发送缓存区的最大大小。
  ·tcp_syncookies:该参数与性能无关,用于解决TCP的SYN攻击。

六 下载与安装

1、获取Nginx源码

  可以在Nginx官方网站(http://nginx.org/en/download.html )获取Nginx源码包。将下载的nginx-1.0.14.tar.gz源码压缩包放置到准备好的Nginx源代码目录中,然后解压。例如:

tar -zxvf nginx-1.0.14.tar.gz
2、编译安装Nginx

  安装Nginx最简单的方式是,进入nginx-1.0.14目录后执行以下3行命令:

./configure
make
make install

  configure命令做了大量的“幕后”工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等。
  make命令根据configure命令生成的Makefile文件编译Nginx工程,并生成目标文件、最终的二进制文件。
  make install命令根据configure执行时的参数将Nginx部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制。

七 启动与停止等命令

  默认情况下,Nginx被安装在目录/usr/local/nginx/中,其二进制文件路径为/usr/local/nginc/sbin/nginx,配置文件路径为/usr/local/nginx/conf/nginx.conf。

1、默认方式启动

 直接执行Nginx二进制程序。例如:
   /usr/local/nginx/sbin/nginx
 这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。实际上,在没有显式指定nginx.conf配置文件路径时,将打开在configure命令执行时使用–conf-path=PATH指定的nginx.conf文件

2、另行制定配置文件的启动方式

 使用-c参数指定配置文件。例如:

/usr/local/nginx/sbin/nginx -c tmpnginx.conf

 这时,会读取-c参数后指定的nginx.conf配置文件来启动Nginx。

3、另行指定安装目录的启动方式

 使用-p参数指定Nginx的安装目录。例如:

/usr/local/nginx/sbin/nginx -p usr/local/nginx/
4、另行指定全局配置项的启动方式

  可以通过-g参数临时指定一些全局配置项,以使新的配置项生效。例如:

    /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;"

  上面这行命令意味着会把pid文件写到/var/nginx/test.pid中。
  -g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。就像上例那样,类似这样的配置项:pid /logs/nginx.pid,是不能存在于默认的nginx.conf中的。另一个约束条件是,以-g方式启动的Nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止Nginx服务,那么需要执行下面代码:

    /usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;" -s stop

  如果不带上-g”pid /var/nginx/test.pid;”,那么找不到pid文件,也会出现无法停止服务的情况。

5、测试配置信息是否有错误

  在不启动Nginx的情况下,使用-t参数仅测试配置文件是否有错误。例如:

/usr/local/nginx/sbin/nginx -t

  执行结果中显示配置是否正确。

6、在测试配置阶段不输出信息

  测试配置选项时,使用-q参数可以不把error级别以下的信息输出到屏幕。例如:

    /usr/local/nginx/sbin/nginx -t -q
7、显示版本信息

  使用-v参数显示Nginx的版本信息。例如:

/usr/local/nginx/sbin/nginx -v
8、显示编译阶段的参数

  使用-V参数除了可以显示Nginx的版本信息外,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统的版本、执行configure时的参数等。例如:

/usr/local/nginx/sbin/nginx -V
9、快速地停止服务

  使用-s stop可以强制停止Nginx服务。-s参数其实是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的进程ID,再向运行中的master进程发送TERM信号来快速地关闭Nginx服务。例如:

/usr/local/nginx/sbin/nginx -s stop

  实际上,如果通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样的。

10、“优雅”地停止服务

  如果希望Nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit参数来停止服务。例如:

/usr/local/nginx/sbin/nginx -s quit

  该命令与快速停止Nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。
与快速停止服务相似,可以直接发送QUIT信号给master进程来停止服务,其效果与执行-s quit命令是一样的。例如:

kill -s SIGQUIT <nginx master pid>

  如果希望“优雅”地停止某个worker进程,那么可以通过向该进程发送WINCH信号来停止服务。例如:

kill -s SIGWINCH <nginx worker pid>
11、使运行中的Nginx重读配置项并生效

  使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件。例如:

/usr/local/nginx/sbin/nginx -s reload

  事实上,Nginx会先检查新的配置项是否有误,如果全部正确就以“优雅”的方式关闭,再重新启动Nginx来实现这个目的。类似的,-s是发送信号,仍然可以用kill命令发送HUP信号来达到相同的效果。

kill -s SIGHUP <nginx master pid>
12、日志文件回滚

  使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。例如:

/usr/local/nginx/sbin/nginx -s reopen

  当然,这与使用kill命令发送USR1信号效果相同。

kill -s SIGUSR1 <nginx master pid>
13、平滑升级Nginx

 当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。
 升级时包括以下步骤:
   1)通知正在运行的旧版本Nginx准备升级。通过向master进程发送USR2信号可达到目的。例如:

kill -s SIGUSR2 <nginx master pid>

  这时,运行中的Nginx会将pid文件重命名,如将/usr/local/nginx/logs/nginx.pid重命名为/usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。
   2)启动新版本的Nginx,可以使用以上介绍过的任意一种启动方法。这时通过ps命令可以发现新旧版本的Nginx在同时运行。
   3)通过kill命令向旧版本的master进程发送SIGQUIT信号,以“优雅”的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。

引用:《深入理解Nginx:模块开发与架构解析》
http://www.360sdn.com/Nginx/2014/0807/4044.html
http://blog.csdn.net/ppby2002/article/details/38681345

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值