一.Nginx 概述
1.一款高性能、轻量级Web服务软件
稳定性高
系统资源消耗低
对HTTP并发连接的处理能力高
单台物理服务器可支持30000~5000个并发请求
2.Nginx与Apache区别
最核心的区别在于 Nginx 采用异步非阻塞机制,多个连接可以对应一个进程;Apache 采用的是同步阻塞+多进程/线程模型,一个连接对应一个进程;
Nginx 抗并发能力更高
Nginx 更轻量,内存、CPU资源消耗更少
Nginx 配置简洁,使用场景多,稳定性高
3.Nginx 有哪些应用场景
(1)用作Web网站服务,处理http静态页面请求
(2)用作虚拟主机,实现一个服务器用于做多个网站站点
(3)用作反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群
(4)用作web缓存服务器
4.Nginx 有哪些进程
master进程:管理worker进程,加载配置文件
worker进程:处理请求连接
二.编译安装Nginx服务
1.关闭防火墙,将安装nginx所需软件包传到/opt目录下(从官网下载)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/sysconfig/selinux
下载软件包
2.安装依赖包和解压nginx软件包
nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3.创建运行用户、组
Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
./configure --prefix=/usr/local/nginx\
--user=nginx\
--group=nginx\
--with-http_stub_status_module\
--with-http_ssl_module
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
make -j 4
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 让系统识别nginx的操作命令
5.检查、启动、重启、停止 nginx服务
nginx -t #检查配置文件是否配置正确#启动
/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
#重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
拓展:
#日志分割,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
kill -USR2 <PID号>
启动
停止
日志分割
新版本升级
tar -zxvf 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_modulemake
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
6.添加 Nginx 系统服务
方法一:
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)$COM
;;stop)kill -s QUIT $(cat $PID)
;;restart)$0 stop$0 start
;;reload)kill -s HUP $(cat $PID)
;;*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1esac
exit 0chmod +x /etc/init.d/nginx
chkconfig --add nginx #添加为系统服务
systemctl stop nginx
systemctl start nginx
方法二:
vim /lib/systemd/system/nginx.service
[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
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径[Install]服务安装的相关设置,可设置为多用户
三.认识Nginx服务的主配置文件 nginx.conf
1、全局块:全局配置,对全局生效;
2、events块:配置影响 Nginx 服务器与用户的网络连接;
3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
4、server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
5、location块:用于配置匹配的 uri ;
6、upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
Nginx 的最大并发如何设置?
nginx应用程序配置文件设置
worker_processes(工作进程数,一般设置为与CPU数量相同,或auto)
worker_connections(每个worker进程能够处理的连接数
worker_rlimit_nofile(设置每个worker进程最大可以打开的文件数)nginx服务器系统设置 ulimit -n 65535 #指定进程能够打开的文件数
vim /etc/security/limits.conf --> * soft nofile 65535* hard nofile 65535
nginx 的 root 和 alias 指定路径的区别?
root(根目录)
location /abc {
root /var/www;
}
处理方式:root路径+location路径 http://192.168.80.20/abc/xy101/scj.html --> /var/www/abc/xy101/scj.html
alias(别名目录、虚拟目录)
location /abc {
alias /var/www;
}
处理方式:alias路径替换location路径 http://192.168.80.20/abc/xy101/scj.html --> /var/www/xy101/scj.html
nginx 访问控制
在 http{...}配置块(对所有站点生效)
server{...}配置块(对当前站点所有的访问路径生效)
location{...}配置块(只对当前站点指定的URL访问路径生效) 中添加配置
黑名单配置 deny IP|网段;
白名单配置 allow IP|网段;
deny all;
nginx虚拟主机
基于域名的虚拟主机
server {
server_name XXX; #指定不同的域名
}
基于IP的虚拟主机
server {
listen <IP>:端口; #指定不同的IP
}
基于端口的虚拟主机
server {
listen IP:<端口>; #指定不同的端口
}
编写日志分析脚本