请叫我峰子:
感受VPS建站的乐趣。

nginx安装配置大全解析 & nginx高可用集群负载均衡配置

# nginx安装配置大全解析 & nginx高可用集群负载均衡配置

本文全面解析nginx安装、配置、进程模型、负载均衡、高可用集群等核心技术。

## 1、安装

### 安装依赖

“`bash
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
“`

### 创建临时目录

“`bash
mkdir /var/temp/nginx -p
“`

### 配置安装模块

“`bash
./configure \
–prefix=/usr/local/nginx \
–pid-path=/var/run/nginx/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
“`

### 编译并安装

“`bash
make && make install
“`

## 2、进程模型

**master主进程**:接收指令,控制worker

**worker工作进程**:实际对外提供服务

“`nginx
#user nobody;
# 可调整工作进程数,通常不大于CPU核心数量
# 让每个worker进程都有一个CPU可用
worker_processes 2;
“`

## 3、NGINX处理web请求解析机制

多个worker工作进程通过【抢占机制】分配客户端处理权。

### 3.1 工作线程的分配

1. **主动激活1个worker**:`accept_mutex on`

2. **唤醒所有worker通过互斥锁抢夺**:`accept_mutex off`

### 3.2 epoll模型

### 3.3 工作线程链接数的配置

“`nginx
events {
# 默认每个工作进程都使用epoll
use epoll;
# 每个工作进程的最大连接数
worker_connections 1024;
}
“`

## 4、常用命令

1. `nginx -s stop` – 快速关闭nginx(生产环境不建议)
2. `nginx -s quit` – 等待所有已链接关闭后才关闭
3. `nginx -t` – 检查配置文件
4. `nginx -s reload` – 重启
5. `nginx -V` – 展示nginx详细信息
6. `nginx -c` – 设置nginx配置文件

## 5、日志切割

### 手动切割日志

创建切割脚本 `cut_my_log.sh`:

“`bash
#!/bin/bash
LOG_PATH=”/var/log/nginx/”
RECORD_TIME=$(date -d “yesterday” +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
# 向Nginx主进程发送信号,重新打开日志文件
kill -USR1 `cat $PID`
“`

添加执行权限:`chmod 777 cut_my_log.sh`

### 定时切割日志

“`bash
# 安装定时任务软件
yum install crontabs
# 添加定时任务
crontab -e
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
# 重启定时任务
service crond restart
“`

## 6、匹配规则

### alias别名

浏览器访问 `/static` 实际从 `/home/test` 访问:

“`nginx
location /static {
alias /home/test;
}
“`

### 精确匹配【=】

“`nginx
location = /lhy/index.html {
root /app;
}
“`

### 正则表达式【~】

区分大小写:

“`nginx
location ~ \.(img|png|jpeg|pdf) {
root /app/img;
}
“`

不区分大小写:

“`nginx
location ~* \.(img|png|jpeg|pdf) {
root /app/img;
}
“`

### 以某个字符开头【^~】

“`nginx
location ^~ /lhy/img {
root /app/;
}
“`

## 7、跨域解决方案

“`nginx
listen 8080;
server_name localhost;

# 允许跨域请求的域,*代表所有
add_header ‘Access-Control-Allow-Origin’ *;
# 允许带上cookie请求
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
# 允许请求的方法
add_header ‘Access-Control-Allow-Methods’ *;
# 允许请求的header
add_header ‘Access-Control-Allow-Headers’ *;
“`

## 8、防盗链配置

“`nginx
# 对源站点验证
valid_referers *.imooc.com;
# 非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}
“`

## 9、web应用集群

“`nginx
# 使用upstream配置上游服务器
# 默认使用轮询方式进行分配
upstream test_servers {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}

server {
listen 90;
server_name location;
location / {
proxy_pass http://test_servers;
}
}
“`

## 10、负载均衡

### 轮询(weight)

“`nginx
upstream test_servers {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=2;
server 127.0.0.1:8083 weight=5;
}
“`

### ip_hash

根据客户端IP进行分配。使用iphash时,某个节点需下线应使用down标记,而非删除节点,否则会导致缓存失效。

“`nginx
upstream test_servers {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
“`

### url_hash

将请求的url进行hash计算分发:

“`nginx
upstream tomcats {
hash $request_uri;
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
“`

### 最少连接数

转发到最少连接的机器节点:

“`nginx
upstream tomcats {
least_conn;
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
“`

## 11、upstream指令参数

### max_conns

限制最大连接数,超过限制返回502:

“`nginx
upstream test_servers {
server 127.0.0.1:8081 max_conns=20;
server 127.0.0.1:8082 max_conns=10;
}
“`

### slow_start(商业版)

权重在指定时间内从0提升至配置权重:

“`nginx
upstream test_servers {
server 127.0.0.1:8083 weight=6 slow_start=60s;
}
“`

### down

标识节点不可用:

“`nginx
upstream test_servers {
server 127.0.0.1:8081 down;
}
“`

### backup

备用节点,其他节点全部挂了才能被访问:

“`nginx
upstream test_servers {
server 127.0.0.1:8081 backup;
}
“`

### max_fails、fail_timeout

失败次数达到指定数,节点被标记为不可用:

“`nginx
upstream test_servers {
server 127.0.0.1:8081 max_fails=2 fail_timeout=15s;
}
“`

## 12、keepalive提高吞吐量

“`nginx
upstream tomcats {
server 127.0.0.1:8082;
server 127.0.0.1:8083;
# 设置长连接处理的数量
keepalive 32;
}

server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
# 设置长连接http版本为1.1
proxy_http_version 1.1;
# 清除connection header信息
proxy_set_header Connection “”;
}
}
“`

## 13、缓存

### 浏览器缓存(expires)

“`nginx
location ^~ /lhy/img {
root /app/;
expires 10s;
}
“`

### 反向代理缓存

“`nginx
proxy_cache_path /usr/local/nginx/upstream_cache
keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;

location / {
proxy_pass http://tomcats;
# 启用缓存
proxy_cache mycache;
# 针对200和304状态码缓存8小时
proxy_cache_valid 200 304 8h;
}
“`

## 14、Nginx高可用集群(自建机房)

### Keepalived

Keepalived可以虚拟一个VIP。多个节点选举出一个对外提供服务的ip。

**双机主备**:一主一备,备用机永远不使用,存在资源浪费。

**双主热备**:设置2个虚拟ip,互为主备关系,某一个ip挂了会转发到另一个节点。

## 15、Nginx高可用集群(云端服务器)

### 双机主备

云服务厂商提供负载均衡ip(公网ip),云服务器绑定到负载均衡ip,域名解析到负载均衡ip。

### 双主热备

域名绑定2个负载均衡ip,DNS轮询转发到某一个ip。互为主备,某一个ip挂了会转发到另一个节点。

**nginx配置要点总结:**

– 进程模型:master控制worker
– 负载均衡:轮询、ip_hash、url_hash、最少连接
– 高可用:Keepalived(自建机房)、云负载均衡(云端)
– 性能优化:keepalive、缓存、epoll模型


铁三角团队 · 峰哥 | write | tech
共同成长 💪

赞(0) 打赏
转载请注明:峰网博客 » nginx安装配置大全解析 & nginx高可用集群负载均衡配置

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册