Linux下nginx源码包安装

安装前的准备

以下准备工作理论部分看不懂不要紧,只要记住安装几个包准备几个目录就行。

操作系统要求

首先需要一个内核为linux2.6及以上版本的操作系统,可以用uname -a命令来查询Linux内核版本。

使用nginx的所需要的软件

1)GCC编译器 
GCC可以用来编译C语言程序,可以使用yum方式安装GCC,如

yum install -y gcc
  • 1
  • 1

而nginx中也会用到C++,所以这时候需要用到G++编译器。

  yum install -y gcc-c++
  • 1
  • 1

2)PCRE库 
PCRE是由Philip Hazel开发的函数库,该库支持正则表达式。如果我们在配 置文件 nginx.conf 里使用了正则表达式,那么编译nginx时就必须把PCRE库 编译进nginx 。

 yum install -y pcre pcre-devel
  • 1
  • 1

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

yum install -y zlib zlib-devel
  • 1
  • 1

4)Open SSL 
如果我们服务器不只要支持HTTP,还需要在SSL协议传输http,那么就需要OpenSSL了。

yum install -y openssl openssl-devel
  • 1
  • 1

磁盘目录

要使用nginx,还需要在linux文件系统上准备以下目录。 
1) nginx源代码存放目录 
该目录放置nginx源码文件,已及第三方或我们自己写的模块源代码文件。 
2)nginx编译阶段产生的中间文件存放的目录 
该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在nginx源代码目录下。 
3)部署目录 
该目录存放实际nginx服务运行期间所需要的二进制文件,配置文件等。默认情况下该目录为,/usr/local/nginx 
4)日志文件存放目录 
日志文件通常比较大,当研究,当研究nginx底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件大小增长的极快,需要预先分配一个拥有更大磁盘空间的目录。

Linux内核参数优化

这里面说一种最常用的参数配置,需要修改 /etc/sysctl.congf来更改内核参数,再然后执行sysctl -p使参数生效,永久生效。

fs.file-max = 999999
# 表示进程可以同时打开最大的句柄数
net.ipv4.tcp_tw_reuse = 1
# 这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接。
net.ipv4.tcp_keepalive_time = 600
这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。
net.ipv4.tcp_fin_timeout = 30
# 这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
net.ipv4.tcp_max_tw_buckets = 5000
# 表示操作系统允许TIME-WAIT套接字(socket)数量的最大值
net.ipv4.ip_local_port_range = 1024 61000
# 这个参数表示定义在UDP和TCP连接中本地(不包括连接远端)端口的取值范围
net.ipv4.tcp_rmem = 4096 32768 262142
# 这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值,默认值,最大值
net.ipv4.tcp_wmem = 4096 32768 262142
# 这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值,默认值,最大值
net.core.netdev_max_backlog = 8096
# 当网卡接收数据包的速度大于内核处理速度时,会有一个队列保存这些数据包,这个参数表示该队列的最大值。
net.core.rmem_default = 262144
# 这个参数表示内核套接字(socket)接收缓存区默认大小
net.core.wmem_default = 262144
# 这个参数表示内核套接字(socket)发送缓存区默认大小
net.core.rmem_max = 2097152
# 这个参数表示套接字(socket)接收缓存区的最大大小
net.core.wmem_max = 2097152
# 这个参数表示套接字(socket)发送缓存区的最大大小
net.ipv4.tcp_syncookies = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

获取nginx源码

可以在nginx官网获取nginx源码包。将下载的nginx源码压缩包放置在准备好的nginx源代码目录里(Windows下的同学可以通过FileZillaClient将源码包从Windows下挪到linux系统中),然后解压。

tar -zxvf nginx-1.8.1.tar.gz 
#我下的是1.8.1版本的nginx,大家可以选其他的版本
  • 1
  • 2
  • 1
  • 2

二、编译安装Nginx

其实编译安装nginx超级简单,三条命令,最简单的编译方式就能安装了。

./configure
make
make install
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

configure 命令至关重要大家可以自己在这儿学习尝试。

三、Nginx的命令行控制

在linux中,需要使用命令行来控制nginx服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等行为。默认情况下,nginx被安装在目录/usr/local/nginx/中,其二进制文件路径为/usr/local/ngix/sbin/nginx,配置文件路径/usr/local/nginx/conf/nginx.conf。当然,可以通过configure执行时将他们装在不同的目录。 
1) 默认启动方式 
直接执行nginx二进制程序。

/usr/local/nginx/sbin/nginx
  • 1
  • 1

这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。 
2) 另行制定配置文件的启动方式 
使用-c参数指定配置文件。如:

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
  • 1
  • 1

这时,会读取-c参数后指定的nginx.conf配置文件来启动nginx。 
3) 另行指定安装目录的启动方式 
使用-p参数指定nginx的安装目录。如:

/usr/local/nginx/sbin/nginx -p /usr/local/nginx
  • 1
  • 1

4) 另行指定全局配置项的启动方式 
可以通过-g参数临时指定一下全局配置项,以使新的配置项生效。如:

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

上面这行命令意味着会把pid文件写到/var/nginx/test.pid中。 
5) 测试配置信息是否有错误 
在不启动nginx的情况下,使用-t参数仅测试配置文件是否有错误。

/usr/local/nginx/sbin/nginx -t
  • 1
  • 1

执行结果显示配置是否正确。 
6) 在测试配置阶段不输出信息 
测试配置选项时,使用-q参数可以不把error级别以下的信息输出到屏幕。

/usr/local/nginx/sbin/nginx -t -q
  • 1
  • 1

7)显示版本信息 
使用-v参数显示nginx的版本信息 
/usr/local/nginx/sbin/nginx -v 
8)显示编译阶段的参数 
使用-V参数除了可以显示nginx版本信息之外,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统版本、执行configure时的参数等

/usr/local/nginx/sbin/nginx -V
  • 1
  • 1

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

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

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

ps -ef | grep nginx
  • 1
  • 1

接下来直接通过kill命令来发送信号

kill -s SIGTERM ***
  • 1
  • 1

或者:

kill -s SIGINT ***
  • 1
  • 1

10) “优雅”的停止服务 
如果希望nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit 参数来停止服务。如:

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

该命令与快速停止nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收听到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连续,然后把当前正在处理的连接全部处理完,最后再退出进程。 
11)使运行中的nginx重读配置并生效 
使用-s reload 参数可以使运行中的nginx服务重新加载nginx.conf文件。如:

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

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

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

安装前的准备

以下准备工作理论部分看不懂不要紧,只要记住安装几个包准备几个目录就行。

操作系统要求

首先需要一个内核为linux2.6及以上版本的操作系统,可以用uname -a命令来查询Linux内核版本。

使用nginx的所需要的软件

1)GCC编译器 
GCC可以用来编译C语言程序,可以使用yum方式安装GCC,如

yum install -y gcc
  • 1
  • 1

而nginx中也会用到C++,所以这时候需要用到G++编译器。

  yum install -y gcc-c++
  • 1
  • 1

2)PCRE库 
PCRE是由Philip Hazel开发的函数库,该库支持正则表达式。如果我们在配 置文件 nginx.conf 里使用了正则表达式,那么编译nginx时就必须把PCRE库 编译进nginx 。

 yum install -y pcre pcre-devel
  • 1
  • 1

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

yum install -y zlib zlib-devel
  • 1
  • 1

4)Open SSL 
如果我们服务器不只要支持HTTP,还需要在SSL协议传输http,那么就需要OpenSSL了。

yum install -y openssl openssl-devel
  • 1
  • 1

磁盘目录

要使用nginx,还需要在linux文件系统上准备以下目录。 
1) nginx源代码存放目录 
该目录放置nginx源码文件,已及第三方或我们自己写的模块源代码文件。 
2)nginx编译阶段产生的中间文件存放的目录 
该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在nginx源代码目录下。 
3)部署目录 
该目录存放实际nginx服务运行期间所需要的二进制文件,配置文件等。默认情况下该目录为,/usr/local/nginx 
4)日志文件存放目录 
日志文件通常比较大,当研究,当研究nginx底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件大小增长的极快,需要预先分配一个拥有更大磁盘空间的目录。

Linux内核参数优化

这里面说一种最常用的参数配置,需要修改 /etc/sysctl.congf来更改内核参数,再然后执行sysctl -p使参数生效,永久生效。

fs.file-max = 999999
# 表示进程可以同时打开最大的句柄数
net.ipv4.tcp_tw_reuse = 1
# 这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接。
net.ipv4.tcp_keepalive_time = 600
这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。
net.ipv4.tcp_fin_timeout = 30
# 这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
net.ipv4.tcp_max_tw_buckets = 5000
# 表示操作系统允许TIME-WAIT套接字(socket)数量的最大值
net.ipv4.ip_local_port_range = 1024 61000
# 这个参数表示定义在UDP和TCP连接中本地(不包括连接远端)端口的取值范围
net.ipv4.tcp_rmem = 4096 32768 262142
# 这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值,默认值,最大值
net.ipv4.tcp_wmem = 4096 32768 262142
# 这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值,默认值,最大值
net.core.netdev_max_backlog = 8096
# 当网卡接收数据包的速度大于内核处理速度时,会有一个队列保存这些数据包,这个参数表示该队列的最大值。
net.core.rmem_default = 262144
# 这个参数表示内核套接字(socket)接收缓存区默认大小
net.core.wmem_default = 262144
# 这个参数表示内核套接字(socket)发送缓存区默认大小
net.core.rmem_max = 2097152
# 这个参数表示套接字(socket)接收缓存区的最大大小
net.core.wmem_max = 2097152
# 这个参数表示套接字(socket)发送缓存区的最大大小
net.ipv4.tcp_syncookies = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

获取nginx源码

可以在nginx官网获取nginx源码包。将下载的nginx源码压缩包放置在准备好的nginx源代码目录里(Windows下的同学可以通过FileZillaClient将源码包从Windows下挪到linux系统中),然后解压。

tar -zxvf nginx-1.8.1.tar.gz 
#我下的是1.8.1版本的nginx,大家可以选其他的版本
  • 1
  • 2
  • 1
  • 2

二、编译安装Nginx

其实编译安装nginx超级简单,三条命令,最简单的编译方式就能安装了。

./configure
make
make install
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

configure 命令至关重要大家可以自己在这儿学习尝试。

三、Nginx的命令行控制

在linux中,需要使用命令行来控制nginx服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等行为。默认情况下,nginx被安装在目录/usr/local/nginx/中,其二进制文件路径为/usr/local/ngix/sbin/nginx,配置文件路径/usr/local/nginx/conf/nginx.conf。当然,可以通过configure执行时将他们装在不同的目录。 
1) 默认启动方式 
直接执行nginx二进制程序。

/usr/local/nginx/sbin/nginx
  • 1
  • 1

这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。 
2) 另行制定配置文件的启动方式 
使用-c参数指定配置文件。如:

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
  • 1
  • 1

这时,会读取-c参数后指定的nginx.conf配置文件来启动nginx。 
3) 另行指定安装目录的启动方式 
使用-p参数指定nginx的安装目录。如:

/usr/local/nginx/sbin/nginx -p /usr/local/nginx
  • 1
  • 1

4) 另行指定全局配置项的启动方式 
可以通过-g参数临时指定一下全局配置项,以使新的配置项生效。如:

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

上面这行命令意味着会把pid文件写到/var/nginx/test.pid中。 
5) 测试配置信息是否有错误 
在不启动nginx的情况下,使用-t参数仅测试配置文件是否有错误。

/usr/local/nginx/sbin/nginx -t
  • 1
  • 1

执行结果显示配置是否正确。 
6) 在测试配置阶段不输出信息 
测试配置选项时,使用-q参数可以不把error级别以下的信息输出到屏幕。

/usr/local/nginx/sbin/nginx -t -q
  • 1
  • 1

7)显示版本信息 
使用-v参数显示nginx的版本信息 
/usr/local/nginx/sbin/nginx -v 
8)显示编译阶段的参数 
使用-V参数除了可以显示nginx版本信息之外,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统版本、执行configure时的参数等

/usr/local/nginx/sbin/nginx -V
  • 1
  • 1

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

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

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

ps -ef | grep nginx
  • 1
  • 1

接下来直接通过kill命令来发送信号

kill -s SIGTERM ***
  • 1
  • 1

或者:

kill -s SIGINT ***
  • 1
  • 1

10) “优雅”的停止服务 
如果希望nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit 参数来停止服务。如:

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

该命令与快速停止nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收听到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连续,然后把当前正在处理的连接全部处理完,最后再退出进程。 
11)使运行中的nginx重读配置并生效 
使用-s reload 参数可以使运行中的nginx服务重新加载nginx.conf文件。如:

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

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

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

猜你喜欢

转载自blog.csdn.net/u013044029/article/details/72677102