目录
Nginx是一款高性能、轻量级Web服务软件;稳定性高;系统资源消耗低;对HTTP并发连接的处理能力高(单台物理服务器可支持30 000~50000个并发请求)。
1.Nginx服务基础
(1)Nginx与Apache的区别
Nginx采用异步非阻塞机制,多个连接可以对应一个进程;Apache采用同步多进程/线程模型,一个连接对应一个进程。
Nginx抗并发能力更高;更轻量,内存、CPU资源消耗更少;配置简洁,使用场景多,稳定性高。
(2)编译安装Nginx服务
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
/usr/local/nginx/sbin/nginx #启动
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
##停止
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx
nginx -s quit
##重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
nginx -s reload
##日志分割,重新打开日志文件
kill -USR1 <PID号>
kill -USR1 $(cat nginx.pid)
#平滑升级
kill -USR2 <PID号>
新版本升级:
cd /opt/
tar xf nginx-1.xx.xx.tar.gz ##上传最新包并解压
cd nginx-1.xx.xx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make -j 2
cd /usr/local/nginx/sbin/
mv nginx nginx_lod
cp /opt/ginx-1.xx.xx/objs/nginx ./
cd /opt/ginx-1.xx.xx/
make upgrade #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
nginx -V ##显示配置参数
nginx -v ##版本号
先去官网下载最新版本的nginx,再上传到nginx服务器并进行解压,先用.configure进行配置,按照原有的配置配置,再用make编译升级成二进制文件,然后把二进制文件nginx替换掉原有的老文件,然后在用make upgrade进行升级或用kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid)
添加 Nginx 系统服务
方法一
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
方法二
cd /etc/yum.repos.d/
ls
上传nginx.repo
vim nginx.repo
yum install -y nginx
systemctl start nginx
netstat -lntp | grep :80
cd /usr/lib/systemd/system
ls nginx.service
vim nginx.service
Nginx服务的主配置文件 nginx.conf
1、全局块:全局配置,对全局生效;
2、events块:配置影响 Nginx 服务器与用户的网络连接;
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
5、location块:用于配置匹配的 uri ;
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
全局配置
worker_rlimit_nofile 65535; #指定 worker 子进程可以打开的最大文件句柄数,默认为1024
Nginx 有哪些进程?
master进程:管理worker进程,加载配置文件
worker进程:处理请求连接
I/O 事件配置
events {
use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 65535; #每个 worker 子进程能够处理的最大并发连接数
multi_accept on; #是否一次性将监听到的连接全接收进来,默认为off,关闭时一次接收一条连接
accept_mutex on; #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。 这可能会浪费资源并产生不可预计的后果,例如惊群问题
}
#如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
#在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。默认1024
nginx服务器系统设置
ulimit -n 65535 #指定进程能够打开的文件数
vim /etc/security/limits.conf
* soft nofile 65535 ##所有用户 软限制
* hard nofile 65535 ##所有用户 硬限制
Nginx的最大并发如何设置?
nginx应用程序配置文件设置
worker_processes(工作进程数,一般设置为与CPU数量相同,或auto)
worker_connections(每个worker进程能够处理的连接数)
worker_rlimit_nofile(设置每个worker进程最大可以打开的文件数)
nginx 的 root 和 alias 指定路径的区别?
root(根目录)
location /abc {
root /var/www;
}
处理方式: root路径+location路径
--> /var/www/abc/xlb666/scj.html
alias(别名目录、虚拟目录)
location /abc {
alias /var/www;
}
处理方式: alias路径替换location路径 http://20.0.0.150/abc/xlb666/xlb.html --> /var/www/xlb666/xlb.html
Nginx应用场景
用作Web网站服务,处理http静态页面请求
用作虚拟机,实现一个服务器用于做多个网站站点
用作反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群
用作Web缓存服务器
nginx 服务器当前的并发量怎么看?
1)开启状态统计模块 --with-http_stub_status_module ,修改配置文件 开启状态统计功能 stub_status on; ,访问状态统计页面,看 Active connections: 行的数组
2)ss -antp | grep nginx | grep -c ESTAB
netstat
nginx 访问状态统计
1)安装nginx时添加状态统计模块 ./configure --with-http_stub_status_module
2)修改配置文件,开启状态统计功能 stub_status on; access_log off;
3)测试验证 curl -s
nginx 访问认证
1)安装 httpd-tools 软件包,使用 htpasswd 生成用户认证文件,并修改文件的归属nginx和权限400
2)修改配置文件,添加 basic_auth basic_auth_user_file 配置
3)测试验证
nginx 访问控制
在 http{...}配置块(对所有站点生效) server{...}配置块(对当前站点所有的访问路径生效) location{...}配置块(只对当前站点指定的URL访问路径生效) 中添加配置
黑名单配置 deny IP|网段;
白名单配置 allow IP|网段;
deny all;
2.Nginx虚拟主机
nginx虚拟主机
基于域名的虚拟主机
server {
server_name XXX; #指定不同的域名
}
基于IP的虚拟主机
server {
listen <IP>:端口; #指定不同的IP
}
基于端口的虚拟主机
server {
listen IP:<端口>; #指定不同的端口
}