以下准备工作理论部分看不懂不要紧,只要记住安装几个包准备几个目录就行。
首先需要一个内核为linux2.6及以上版本的操作系统,可以用uname -a
命令来查询linux内核版本。
1)GCC编译器
GCC可以用来编译C语言程序,可以使用yum方式安装GCC,如
yum install -y gcc
而nginx中也会用到C++,所以这时候需要用到G++编译器。
yum install -y gcc-c++
2)PCRE库
PCRE是由Philip Hazel开发的函数库,该库支持正则表达式。如果我们在配 置文件 nginx.conf 里使用了正则表达式,那么编译nginx时就必须把PCRE库 编译进nginx 。
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)Open SSL
如果我们服务器不只要支持HTTP,还需要在SSL协议传输http,那么就需要OpenSSL了。
yum install -y openssl openssl-devel
要使用nginx,还需要在linux文件系统上准备以下目录。
1) nginx源代码存放目录
该目录放置nginx源码文件,已及第三方或我们自己写的模块源代码文件。
2)nginx编译阶段产生的中间文件存放的目录
该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令会将该目录命名为objs,并放在nginx源代码目录下。
3)部署目录
该目录存放实际nginx服务运行期间所需要的二进制文件,配置文件等。默认情况下该目录为,/usr/local/nginx
4)日志文件存放目录
日志文件通常比较大,当研究,当研究nginx底层架构时,需要打开debug级别的日志,这个级别的日志非常详细,会导致日志文件大小增长的极快,需要预先分配一个拥有更大磁盘空间的目录。
这里面说一种最常用的参数配置,需要修改 /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
可以在nginx官网获取nginx源码包。将下载的nginx源码压缩包放置在准备好的nginx源代码目录里(Windows下的同学可以通过FileZillaClient将源码包从Windows下挪到linux系统中),然后解压。
tar -zxvf nginx-1.8.1.tar.gz
#我下的是1.8.1版本的nginx,大家可以选其他的版本
其实编译安装nginx超级简单,三条命令,最简单的编译方式就能安装了。
./configure
make
make install
configure 命令至关重要大家可以自己在这儿学习尝试。
在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
这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。
2) 另行制定配置文件的启动方式
使用-c参数指定配置文件。如:
/usr/local/nginx/sbin/nginx -c /tmp/nginx.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中。
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信号,效果是一样的。例如,先通过ps命令来查看nginx master 的进程ID:
ps -ef | grep nginx
接下来直接通过kill命令来发送信号
kill -s SIGTERM ***
或者:
kill -s SIGINT ***
10) “优雅”的停止服务
如果希望nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit 参数来停止服务。如:
/usr/local/nginx/sbin/nginx -s quit
该命令与快速停止nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收听到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口,停止接收新的连续,然后把当前正在处理的连接全部处理完,最后再退出进程。
11)使运行中的nginx重读配置并生效
使用-s reload 参数可以使运行中的nginx服务重新加载nginx.conf文件。如:
/usr/local/nginx/sbin/nginx -s reload
12)日志文件回滚
使用 -s reopen 参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其它目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大。如:
/usr/local/nginx/sbin/nginx -s reopen