nginx 安装及常用指令
centos7 安装 nginx
nginx 安装需要的依赖环境
- gcc
- pcre
- openssl
- zlib
通过指令安装
yum install gcc-c++ | |
yum install -y pcre pcre-devel | |
yum install -y zlib zlib-devel | |
yum install -y openssl openssl-devel |
下载nginx
方式一:直接下载.tar.gz安装包,地址:nginx.org/en/download…
方式二:wget 下载
更换版本,自行替换下载链接
# 下载nginx | |
wget -c https://nginx.org/download/nginx-1.19.0.tar.gz | |
# 解压 | |
tar -zxvf nginx-1.19.0.tar.gz | |
| |
cd nginx-1.19.0 |
配置nginx
默认配置
一般使用默认配置即可
cd nginx-1.19.0 | |
| |
./configure |
自定义配置(可选)
./configure \ | |
--prefix=/usr/local/nginx \ | |
--conf-path=/usr/local/nginx/conf/nginx.conf \ | |
--pid-path=/usr/local/nginx/conf/nginx.pid \ | |
--lock-path=/var/lock/nginx.lock \ | |
--error-log-path=/var/log/nginx/error.log \ | |
--http-log-path=/var/log/nginx/access.log \ | |
--with-http_gzip_static_module \ | |
--http-client-body-temp-path=/var/temp/nginx/client \ | |
--http-proxy-temp-path=/var/temp/nginx/proxy \ | |
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ | |
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ | |
--http-scgi-temp-path=/var/temp/nginx/scgi |
注:将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
安装nginx
# 编译安装 | |
make && make install | |
| |
cd /usr/local/nginx/sbin/ | |
# 查看版本号 | |
./nginx -v | |
# 查看安装路径 | |
whereis nginx |
启动、停止nginx
cd /usr/local/nginx/sbin/ | |
# 启动 | |
./nginx | |
# 强暴关闭 | |
./nginx -s stop | |
# 优雅关闭 | |
./nginx -s quit | |
# 重启 | |
./nginx -s reopen | |
# 重载 | |
./nginx -s reload |
查看nginx进程
ps aux|grep nginx
dokcer 安装 nginx
- 下载镜像,并复制默认配置
- 停止删除容器
- 生成启动文件 - start.sh
- 运行start.sh 启动mynginx
- 访问
127.0.0.1
可以访问到nginx默认页面 - 配置反向代理
- 下载镜像,并复制默认配置
docker run --name mynginx -d nginx
创建主机挂载配置文件
mkdir -p ~/i/apps/nginx/{conf,conf.d,html,logs}
复制默认配置
docker cp mynginx:/etc/nginx/nginx.conf ~/i/apps/nginx/conf/nginx.conf | |
docker cp mynginx:/etc/nginx/conf.d/default.conf ~/i/apps/nginx/conf.d/default.conf | |
docker cp mynginx:/usr/share/nginx/html/index.html ~/i/apps/nginx/html/index.html |
要想查询默认配置可以:
docker run -i -t nginx /bin/bash
:查看所有文件夹 cat /etc/nginx/nginx.conf
:查看nginx.conf文件内容然后拷贝出来 cat /etc/nginx/conf.d/default.conf
:查看default.conf文件内容然后拷贝出来 /usr/share/nginx/html
:默认首页文件夹html路径 /var/log/nginx
:日志文件路径
- 停止删除容器
docker rm -f mynginx
- 生成启动文件 - start.sh
[root@master ~]# cd ~/i/apps/nginx/ | |
[root@master nginx]# ls | |
conf conf.d html logs | |
[root@master nginx]# cat <<EOF > start.sh | |
#!/bin/bash | |
NGINX_DIR=`pwd` | |
docker stop mynginx | |
docker rm mynginx | |
docker run -d --restart always -p 80:80 --name mynginx -v ${NGINX_DIR}/html:/usr/share/nginx/html -v ${NGINX_DIR}/conf/nginx.conf:/etc/nginx/nginx.conf -v ${NGINX_DIR}/conf.d:/etc/nginx/conf.d -v ${NGINX_DIR}/logs:/var/log/nginx nginx | |
EOF |
说明:
-d
: 后台运行容器; --name
: 指定容器名; -p
: 指定服务运行的端口; -v
: 映射目录或文件;
- 运行start.sh 启动mynginx
[ | ]|
Error response from daemon: No such container: mynginx | |
Error: No such container: mynginx | |
5a23fe9288535c0141afb5b55c7c907e8c0a108dcda8fe486fb02028975ad5bb |
- 访问
http://127.0.0.1/
可以访问到nginx默认页面 - 配置反向代理
[root@master nginx]# cd conf.d/ | |
[root@master conf.d]# ls | |
default.conf | |
[root@master conf.d]# vi test.com.conf | |
server { | |
listen 80; | |
server_name test.com; | |
access_log /var/log/nginx/wanfei.access.log main; | |
error_log /var/log/nginx/wanfei.error.log error; | |
location / { | |
proxy_set_header Host $http_host; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
proxy_pass http://127.0.0.1:80; | |
} | |
} |
常用指令
cd /usr/local/nginx/sbin/ | |
# 启动 | |
./nginx | |
# 查看nginx版本 | |
./nginx -v | |
# 强暴关闭 | |
./nginx -s stop | |
# 优雅关闭 | |
./nginx -s quit | |
# 重启 | |
./nginx -s reopen | |
# 重载 | |
./nginx -s reload | |
# 检测配置文件 | |
./nginx -t |
nginx原理
nginx的master和worker关系
master只有一个,是领导,负责管理、监控。worker有很多个,是打工者,负责处理领导分发的任务。
但master不会去分配任务,而是会通知各位worker一声,各位worker再去争夺资源(客户端),已经抢到的不会再去争夺下一个资源,争夺到后worker开始读取请求-解析请求-处理请求,数据彻底返回客户端之后,这个worker争夺事件就算结束,可以继续争夺下一个资源。
思考
1、一个master和多个woker的好处 对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
2、设置多少个woker合适 Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程, 但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的(一般设置work数与cpu数一致)。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
3、连接数worker_ connection计算 这个值是表示每个worker进程所能建立连接的最大值,所以,一个nginx 能建立的最大连接数,应该是worker_connections * worker_processes。当然,这里说的是最大连接数,对于HTTP 请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,如果是支持http1.1的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes / 2, 而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_proceses/4. 因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接 worker_connections :连接数 worker_processes:worker数