一个高性能的HTTP和反向代理服务器,占有内存少,并发能力强,还可以作为静态页面的web服务器同时还支持CGI协议。
常用命令
1.启动命令
找到nginx二进制文件(/usr/local/nginx/sbin)
docker 容器 一般在(/etc/nginx/sbin)
./nginx
2.关闭命令
./nginx -s stop
3.重新加载配置文件
./nginx -s reload
4.查看版本号
./nginx -v
nginx配置文件
默认配置文件default.conf
worker_process 1;
events{
worker_connections 1024;
}
http{
include mime.types;
default_type application/octer-stream;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
localtion / {
root html;
index index.html,index.htm;
}
error_page 500 502 503 504 /50x.html;
localtion = /50x.html{
root html;
}
}
}
全局块:
主要包括nginx服务器的用户,允许生成的worker process(支持的worker进程数量)数,进程存放路径,日志存放路径和类型以及配置文件和类型引入。
events块:
nginx服务器与用户的网络连接,常用的设置比如多 worker process下的网络连接进行序列化,是否允许接收多个网络连接,选取哪个事件驱动模型来处理连接请求,worker_connections,每个worker process 可以支持的最大连接数。
http块:
这个是nginx服务器中最频繁的部分,代理,缓存和日志等绝大多数功能和第三方模块配置
1.http全局块
http全局配置的指令包括文件引入,MIME-TYPE定义,日志定义,连接超时时间,单连接请求上线
2.server块
主要作用就是基于nginx服务器接收到请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制等功能。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机,每个server块也分为全局server块以及可以同事包含多个localtion块
location 指令说明
语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~ *:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ * 标识。
1.反向代理:
反向代理客户端是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送大反向代理服务器,由反向代理服务器去获取数据后,返回客户端,此时代理服务器和目标服务器就是一个服务器,暴露了代理服务器的地址,隐藏了真是服务器ip地址。
配置文件
1.配置单个
server {
listen 8000;
server_name 192.168.56.121;
location / {
root /opt/html;
index index.html index.htm;
}
}
2.配置多个
server {
listen 8000;
server_name 192.168.56.121;
location / {
root /opt/html;
index index.html index.htm;
}
location /api/v1{
proxy_pass http://localhost:9001/api/v1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
}
location /api/v2 {
proxy_pass http://localhost:8080/api/v1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
}
}
2.负载均衡:
当单个服务器解决不了并发数量,我们只有增加服务器的数量来解决,这时候就需要使用负载均衡策略来将请求分发到各个服务器上。
配置文件
http {
upsteam myserver{
ip_hash;//策略
server 192.168.56.101:8000 weight =1;
server 192.168.56.102:8000 weight =2;
}
server {
localtion /{
proxy_pass http://myserver;
proxy_connection_time 10;
}
}
}
nginx提供策略
1.轮询(默认)
每个请求按照顺序一次分发到不同服务器,后端服务器宕机,会自动剔除。
2.权重
upsteam myserver{
server 192.168.56.101:8000 weight =10;
server 192.168.56.102:8000 weight =2;
}
weght越大访问的比例成正比
3.hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
4.响应时间
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool {
server 192.168.56.101:8000 ;
server 192.168.56.102:8000 ;
fair ;
}
3.动静分离:
将静态页面和动态资源分开管理来提高解析速度,降低单个服务器压力。
修改/conf/nginx.confp配置文件
server{
listen 80;
server_name 192.168.17.129;
location /www/ {
root /data/;
index index.html index.htm
}
location /image/ {
root /data/;
autoindex on;
}
}
测试:
4.高可用:
为了防止nginx宕机导致服务不可用,需要使用主备的方式来提高nginx的高可用性
前置条件:
1.配置高可用需要俩台服务器
2.需要安装和上nginx和keeepalived
高可用集群
修改/etc/keepalived/keepalivec.conf配置文件
#全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129 #主机ip
smtp_connect_timeout 30
router_id LVS_DEVEL #服务器域名名字,可在/etc/hosts中查看127.0.0.1映射的域名
}
#脚本配置
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"#脚本路径
interval 2 #(检测脚本执行的间隔);每隔2s检查一次
weight 2 #设置服务器权重
}
#虚拟ip的配置
vrrp_instance VI_1 {
state BACKUP # Master为Master;Salve为BACKUP
interface ens33 #网卡;可以用ip addr 看网卡名
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #每1s发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟ip地址,多台keepalived绑定一个ip;必须同一网段
}
}
在/usr/local/src 添加检测脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #nginx启动路径
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived #nginx挂掉后,杀掉这个服务器的所有keepalived进程
fi
fi
启动nginx和keepalived
nginx启动
./nginx
启动keepalived
systemctl start keepalived.service
把住服务器的nginx和keeperalived停止,在输入之前的访问地址如果还可以访问说明成功
nginx原理
work工作原理
1个matser& 多个worker机制的好处
每个work是独立进程,如果其他worker 出现问题不会造成服务中断
需要设置多少个worker
nginx采用的是与redis类似的io多路复用机制,每个worker是一个独立的进程,每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,每个worker进程可以把一个cpu发挥到极致,所以worker数和服务器的cpu数相等最为适宜。worker多于cpi会导致cpu频繁切换导致损耗
配置文件(nginx.conf)
worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000
#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000
原文链接