nginx 安装及常用指令
centos7 安装 nginx
nginx 安装需要的依赖环境
- gcc
- pcre
- openssl
- zlib
通过指令安装
代码语言:javascript复制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 下载
更换版本,自行替换下载链接
代码语言:javascript复制# 下载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
默认配置
一般使用默认配置即可
代码语言:javascript复制cd nginx-1.19.0
./configure
自定义配置(可选)
代码语言:javascript复制./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
代码语言:javascript复制# 编译安装
make && make install
cd /usr/local/nginx/sbin/
# 查看版本号
./nginx -v
# 查看安装路径
whereis nginx
启动、停止nginx
代码语言:javascript复制cd /usr/local/nginx/sbin/
# 启动
./nginx
# 强暴关闭
./nginx -s stop
# 优雅关闭
./nginx -s quit
# 重启
./nginx -s reopen
# 重载
./nginx -s reload
查看nginx进程
代码语言:javascript复制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}
复制默认配置
代码语言:javascript复制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
[root@master nginx]# sh start.sh
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
代码语言:javascript复制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;
}
}
常用指令
代码语言:javascript复制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数