install from source
因为编译包版本比较落后
how to
1. download *.tar.gz (apthome nginx)
2. maybe need install something like
zlib error
sudo apt install -y zlibc zlib1g zlib1g-dev
PCRE library error
sudo apt install -y libpcre3 libpcre3-dev
ssl error
sudo apt install -y libssl-dev
3. cd tar directory,execute
1.autoreconf -vif;
2.custom
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--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/ \
--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_gzip_static_module \
3. make;sudo make install
start & stop
4.1 sudo nginx -c /etc/nginx/nginx.conf
must use sudo
How to fix getpwnam(“nginx”) failed,this is because ./configure --user=nginx --group=nginx just add them
sudo groupadd -f nginx
sudo useradd -g nginx nginx
or remove them
sudo groupdel nginx;sudo userdel nginx
4.2 pid is current ps -ef root pid
is in /var/run/nginx/nginx.pid
when stop there is nothing,when start will create nginx.pid file
4.2 stop
1.从容停止
sudo kill -QUIT `cat /var/run/nginx/nginx.pid`
2.快速停止
sudo kill -TERM pid
sudo kill -INT pid
3.强制停止
pkill -9 nginx
4.3 restart
1. check nginx.conf no error,must use absolute path(可以省略,不是必须,下面重启的时候默认会检查,这个操作可以用来排查配置文件的错误)
sudo nginx -t -c /etc/nginx/nginx.conf
2. kill -HUP $nginxpid
当nginx接到HUP信号时,他会尝试先解析配置文件,如果指定,则使用指定的),如果成功,就应用新的配置文件,之后nginx运行新的工作进程并从容关闭旧的工作进程,
如果新的配置文件应用失败,nginx将继续使用旧的配置文件工作
4.4 信号分类
TERM,INT 快速关闭
QUIT 从容关闭
HUP 平滑重启,重新加载配置文件
USR1 重新打开日志文件,在切割日志时用途很大
USR2 平滑升级可执行程序;
WINCH 从容关闭工作进程(worker)
平滑升级
1. download && install
最好备份下之前的可执行文件
mv /usr/sbin/nginx /usr/sbin/nginx.back
2. kill -USR2 旧版本nginx主进程号
USR2 平滑升级可执行程序;
3. 旧版本的nginx.pid重命名为 nginx.pid.oldbin
4. kill -WINCH 旧版本nginx主进程号
WINCH 从容关闭工作进程(worker)
5. 一段时间后,旧的worker progress处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求了,旧的只剩下一个master progress了
6. 这个时候决定到底用旧的还是新的
如果还是要使用旧的
kill -HUP 旧的master progress id,则nginx将会重新启动它的worker progress
kill -TERM 新的主进程号
这两个命令之后,nginx.pid.oldbin 恢复成 nginx.pid
一切旧还是旧的进程
如果使用新的
kill -QUIT 旧的主进程号 ,这样就关闭了旧的进程,只留下了新的主进程,达到了升级的目的
ps -ef | gerp nginx
root 21481 6157 0 09:38 ? 00:00:00 nginx: master process nginx -c /etc/nginx/nginx.conf
www-data 21482 21481 0 09:38 ? 00:00:00 nginx: worker process
www-data 21483 21481 0 09:38 ? 00:00:00 nginx: worker process
www-data 21484 21481 0 09:38 ? 00:00:00 nginx: worker process
www-data 21485 21481 0 09:38 ? 00:00:00 nginx: worker process