由于 nginx运行时 一个master 和多个 worker进程以线程的方式运行

Nginx 学习 2-虚拟主机配置与热部署 - 图1

  1. worker_processes 就代表worker进程数,我设置的是根据cpu核数。
  2. user 代表配置文件启动生效用户 也可以加上用户组
  3. worker_connections worker进程连接数

http://nginx.org/en/docs/ nginx 配置文件文档

基于多Ip的虚拟主机

  1. location / ##说明映射的是本地nginx安装路径
  2. root ##路径下的文件夹
  3. index ## 文件夹下的首页

基于多Ip的虚拟主机

前提主机是多网卡:不同ip对应不同路径 端口监听默认80

  1. server {
  2. listen 192.168.1.110;
  3. server_name localhost;
  4. location / {
  5. root server1/html;
  6. index index.html index.htm;
  7. }
  8. }
  9. server {
  10. listen 192.168.1.111;
  11. server_name localhost;
  12. location / {
  13. root server2/html;
  14. index index.html index.htm;
  15. }
  16. }

基于多端口的虚拟主机

  1. server {
  2. listen 9011;
  3. server_name localhost;
  4. location / {
  5. root server3/html;
  6. index index.html index.htm;
  7. }
  8. }

基于域名的虚拟主机

  1. server {
  2. listen 80;
  3. server_name 域名; //匹配优先级 精确>左侧通配符>右侧通配符>正则
  4. location / {
  5. root server4/html;
  6. index index.html index.htm;
  7. }
  8. }

热部署

当从老版本替换为新版本的 nginx 的时候,如果不热部署的话,会需要取消 nginx 服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了在不影响用户的体验下进行版本升级,就需要通过信号量热部署来升级版本。

注意一点:新的nginx编译后的 logs、sbin、conf这些目录名字不能变

先备份nginx二进制文件 并用新的二进制nginx文件覆盖
cp nginx nginx.bak

Nginx 学习 2-虚拟主机配置与热部署 - 图2

Nginx 学习 2-虚拟主机配置与热部署 - 图3

启动新的nginx 这里说明一下 nginx 启动时必须以绝对路径启动,不然SIGUSR2无法找到nginx
kill -s SIGUSR2 21598

Nginx 学习 2-虚拟主机配置与热部署 - 图4

Nginx 学习 2-虚拟主机配置与热部署 - 图5

现在 新旧进程 都并存,并且在logs下存在了一个旧进程的master 进程pid
这时 可以优雅退出worker进程,具体用户超时时间连接参数 worker shutdown timeout time 在配置文件可以配置
kill -s SIGWINCH 21598

Nginx 学习 2-虚拟主机配置与热部署 - 图6

此时旧master 还存在的情况下可以开始验证新worker进程的nginx 是否满足需求 如果满足需求可以正式让就master退出了

kill -s SIGQUIT 21598 至此平滑升级就可以了;如果新版有不满足需求,未通过测试 在老版本的master未退出时可以回滚

kill -s SIGHUP 21598 此时新旧进程也是并存的

kill -s SIGQUIT 21603 退出新master进程