今天主要介绍下 nginx 的安装与简单使用。
安装 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 安装步骤如下(ubuntu18.04): 1. 安装依赖项: sudo apt-get update sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxml2-dev libgeoip-dev libgoogle-perftools-dev libperl-dev libtool sudo apt-get install openssl 2. 下载 nginx 源码包并解压 wget http://nginx.org/download/nginx-1.16.1.tar.gz 3. 执行安装命令 (ngx_http_proxy_connect_module是一个正向代理的模块,如果有需求,还可以安装其他模块) ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --add-module=/home/wyzane/softwares/ngx_http_proxy_connect_module sudo make sudo make install 安装完成后,就可以启动了 4. 创建软链接 sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin 5. 查看nginx是否启动成功 浏览器中输入:http://127.0.0.1:8081/ 出现nginx的欢迎页即表明nginx启动成功 安装步骤如下(centos8.1): 1. 安装依赖 yum update yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 2. 下载 nginx 源码包并解压 wget http://nginx.org/download/nginx-1.16.1.tar.gz 3. 安装patch命令(对于nginx-1.16,ngx_http_proxy_connect_module需要打补丁) yum -y install patch 4. 给ngx_http_proxy_connect_module打补丁 patch -p1 < /home/wz/softwares/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_101504.patch 5. 执行命令 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --add-module=/home/wz/softwares/ngx_http_proxy_connect_module make make install make clean:重新编译安装 6. 创建软链接 sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin 可能的问题: 1)centos编译安装Nginx提示 bash: make: command not found 解决:yum -y install gcc automake autoconf libtool make
1 2 3 ubuntu上安装net工具: sudo apt-get install net-tools 安装后可以使用 netstat 命令
下面的操作都是在 ubuntu18.04 上完成的。
设置系统服务 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 将nginx添加到系统服务的步骤如下: 1. 新增nginx.service文件 sudo vim /lib/systemd/system/nginx.service 2. 添加如下内容: [Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop [Install] WantedBy=multi-user.target 配置说明: [Unit]部分 Description:描述服务 After:依赖,当依赖的服务启动之后再启动自定义的服务 [Service]部分 Type=forking是后台运行的形式 ExecStart为服务的具体运行命令(需要根据路径适配) ExecReload为重启命令(需要根据路径适配) ExecStop为停止命令(需要根据路径适配) PrivateTmp=True表示给服务分配独立的临时空间 [Install]部分 服务安装的相关设置,可设置为多用户 3. 配置完成后,常用命令如下: # 设置了自启动后,任意目录下执行 systemctl enable nginx.service # 启动nginx服务 systemctl start nginx.service # 设置开机自动启动 systemctl enable nginx.service # 停止开机自动启动 systemctl disable nginx.service # 查看状态 systemctl status nginx.service # 重启服务 systemctl restart nginx.service # 查看所有服务 systemctl list-units --type=service
常用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -c: 指定开启nginx时使用的配置文件 nginx -s: 发送信号 nginx -s stop nginx -s quit 优雅的停止服务 nginx -t: 修改配置文件后,先测试 nginx -v:查看nginx版本 ./nginx -s reload 不停止Nginx服务的方式重启nginx 重启命令还有如下方式: kill -SIGHUP masterpid 与reload相同,都是重启nginx服务(主进程重新生成子进程) 此外,还有一个命令: kill -SIGTERM childpid 向子进程发送退出命令,并告知主进程,主进程会产生新的子进程
目录结构 1 2 3 4 5 6 7 8 9 解压后nginx的目录结构如下: auto: 文件夹 CHANGES: 文件,介绍nginx每个版本的特性 conf: 配置文件所在文件夹 configure: 脚本,在编译前执行,生成中间文件 contrib: html: 提供两个标准html文件: 50x.html,index.html man: linux对nginx的帮助文件 man ./nginx.8 src: nginx的源代码
组成部分 1 nginx 主要由二进制文件(定义nginx的功能)、conf配置文件(控制nginx的行为)、access.log(记录nginx的执行信息)、error.log(记录nginx的错误信息) 这四部分组成。
热部署方式 1 2 3 4 5 6 7 8 9 10 11 12 13 热部署nginx:不停止当前nginx的情况下升级nginx,只需要更换nginx二进制文件 步骤如下: 1.备份当前nginx二进制文件: cp nginx nginx.old 2.用编译后的最新版本的nginx二进制文件替换掉现在的nginx文件 3.给当前nginx的master进程发送信号:kill -USR2 pid 此时会使用新的二进制文件生成新的master进程,老的进程也在使用,两者会平滑的过度;老的进程不会再监听80或者443端口 4.向老的master进程发送信号,优雅的关闭所有进程:kill -WINCH pid。此时老的master进程已经没有了子进程。 若再想恢复老的版本,可以向master进程发起reload命令(用于做版本回退) 日志切割: 1.备份原先的日志文件 mv old.log bak.log 2.重新生成日志文件 ./nginx -s reopen 会重新生成一个old.log日志文件 (可以每天或者每周定时执行日志切割)
搭建静态资源服务器 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 29 30 31 32 搭建静态资源服务器时,可以将下面的内容放在http块下: # 使用了很多变量,日志格式命名,便于区分不同域名下的日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; server { listen 8081; server_name 192.168.0.105; #charset koi8-r; index index.html index.htm; access_log logs/host.access.log main; location / { alias docs/; autoindex on; # 显示docs目录结构 set $limit_rate 1k; # limit_rate是内置变量,用于限制访问速度,每秒传输多少字节到浏览器中 # index index.html index.htm; } #error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 上面的docs就表示静态资源文件夹