安装好 Nginx 后需要设置防火墙开放对应端口
# 列出所开通的端口
$ firewall-cmd --list-all
# 添加端口
$ firewall-cmd --add-service=http -permanent
$ sudo firewall-cmd --add-port=80/tcp --permanent
# 设置成功后需要重启防火墙生效
$ firewall-cmd --reload
Nginx 常用操作命令
如果没有配置环境变量需要进入到 nginx 的安装目录下进行操作
安装目录为 “/usr/local/nginx/sbin”(其他的有可能不一样)
Nginx 配置文件的组成
全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令
比如:worker_processes 1; worker_processes 值越大,可以支持的并发处理量也越多
events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
比如:worker_connections 1024; 支持的最大连接数
http 块
算是 Nginx 服务器配置中最频繁的部分
http 块中包含 http 全局块和 server 块
Nginx 配置实例 - 反向代理
location 指令说明
该指令用于匹配 URL。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
Nginx 配置实例-负载均衡
Step 1:在 http 块中新建 upstream server
负载均衡分配策略
轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,将会自动剔除。例如:
http { upstream myserver { server xxx.xxx.xxx.xxx:8080; server xxx.xxx.xxx.xxx:8081; ...... } }
权重(weight)
权重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。例如:
http { upstream myserver { server xxx.xxx.xxx.xxx:8080 weight=10; server xxx.xxx.xxx.xxx:8081 weight=10; ...... } }
ip_hash
每个请求按照访问 ip 的 hash 结果分配,这样每个请求固定一个后端服务器,可以解决 Session 的问题。例如:
http { upstream myserver { ip_hash; server xxx.xxx.xxx.xxx:8080; server xxx.xxx.xxx.xxx:8081; } }
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
http { upstream myserver { server xxx.xxx.xxx.xxx:8080; server xxx.xxx.xxx.xxx:8081; fair; } }
Step 2:在 server 块中的 location 块中配置一下内容,引用 upstream myserver
location / {
proxy_pass http://myserver;
root html;
index index.html index.htm;
}
Nginx 配置实例-动静分离
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在-起发布,通过nginx 来分开。
通过location指定不同的后缀名实现不同的请求转发通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。( 如果经常更新的文件,不建议使用 expires 来缓存),我这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
location /pages/ {
root static;
index page1.html; #默认首页
}
location /images/ {
root static;
autoindex on; # 列出文件加中所有的内容
}
Nginx 配置实例-高可用服务器集群
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M0DHHjJa-1587277385731)(D:\Learn\笔记\Nginx-img\20200307111238.jpg)]
配置高可用的准备工作
需要两台服务器
在两台服务器上安装 nginx
在两台服务器上安装 keepalived
在两台服务器上安装 keepalived
使用 yum 命令进行安装
$ yum install keepalived -y
查看是否安装成功
$ rpm -q -a keepalived
keepalived 安装目录为:/etc/keepalived
配置文件目录在:/etc/keepalived/keepalived.conf
完成高可用配置(主从配置)
修改
/etc/keepalived/keepalived.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 smtp_connect_timeout 30 router_id LVS_DEVEL # 访问到的主机 在 HOSTS 文件中配置 } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔)单位:秒 weight 2 # 权重 } vrrp_instance VI_1 { state BACKUP # 备份服务器上将 MASTER 改为 BACKUP interface ens33 //网卡 执行 ipconfig 查看 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 advert_int 1 # 发送心跳检测进程是否存活(单位:秒) authentication { #认证方式 auth_type PASS auth_pass 1111 } virtual_ipaddress { # 虚拟 IP 192.168.17.50 // VRRP H 虚拟地址 } }
在
/usr/local/src
添加建测脚本#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
启动两台服务上的 Nginx 和 Keepalived
启动 Nginx:
./nginx
启动 Keepalived:
keepalived:systemctl start keepalived.service
Nginx 原理与优化参数配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXWc5FBw-1587277385736)(D:\Learn\笔记\Nginx-img\20200307133255.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ss8gHXi-1587277385738)(D:\Learn\笔记\Nginx-img\20200307133332.jpg)]
master-workers 的机制的好处
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,
同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会
影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的
worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当
前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
需要设置多少个 worker
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进
程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话
下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu
数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
io 多路复用机制 在 Windows 上不起作用
设置 worker 数量。
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
连接数 worker_connection
这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接
数,应该是 worker_connections worker_processes。当然,这里说的是最大连接数,对于
HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections
worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访
问最大并发数是: worker_connections worker_processes /2,而如果是 HTTP 作 为反向代
理来说,最大并发数量应该是 worker_connections
worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服
务的连接,会占用两个连接。