简介
官网: http://nginx.org Nginx 是一个高性能 HTTP 和反向代理服务器, 也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 由 IgorSysoev 为俄罗斯访问量排第二的 rambler.ru 网站开发, 第一个开源版本 0.1.0 发布于 2004年10月4号. 源码以 BSD 许可发布.
Nginx 相对于 Apache 的优点
- 配置简单, 容易上手
- 内存 和 CPU 占用极低, 约为 Apache 的 1/5 ~ 1/10
- 高并发响应性能非常好, 官方测试: 支持处理每秒5万静态文件
- 反向代理性能非常强, 支持多种方式的负载均衡
- 支持对后端服务做健康检查
- 支持 PHP cgi 和 fastcgi
安装编译环境
安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装 PCRE 库
cd /usr/local
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar -zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make
make install
下载并安装 Nginx
# 下载
cd /usr/local
wget http://nginx.org/download/nginx-1.14.0.tar.gz
# 解压
tar -zxvf nginx-1.14.0.tar.gz
# 编译并安装
cd /usr/local/nginx-1.14.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.35
make
make install
# 安装完成, 检查 Nginx 版本
/usr/local/nginx/sbin/nginx -v
配置反向代理
vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.1.252:80;
# 8000 端口主要用于路由器中的虚拟服务器, 外网转发
listen 192.168.1.252:8000;
server_name 192.168.1.252;
location /wms5 {
proxy_pass http://192.168.1.252:7070/wms5;
proxy_read_timeout 900;
# 客户端最大数据量: 如果大文件上传得修改
client_max_body_size 1024m;
}
location /oms5 {
proxy_pass http://192.168.1.252:7070/oms5;
proxy_read_timeout 900;
client_max_body_size 1024m;
}
}
检查 conf 配置是否正确
/usr/local/nginx/sbin/nginx -t
启动
# 启动
/usr/local/nginx/sbin/nginx
# 停止
/usr/local/nginx/sbin/nginx -s quit
# 或者
pkill nginx
# 重新加载配置
/usr/local/nginx/sbin/nginx -s reload
Nginx 负载均衡
Upstream 负载均衡 5 中算法
- 轮询(默认): 每个请求按时间先后逐一分配到不同的服务器, 如果后端某台服务器挂掉, 自动剔除, 待恢复自动添加上.
- 权重 Weight: 指定轮询权重, 权重越高, 处理请求越多, weight 和 访问比率成正比, 用于后端服务器硬件配置不均的情况.
- ip_hash: 每个请求根据访问的 IP 的 hash 值结果分配, 这样每个方可固定访问到后端服务器, 可以解决 Session 共享问题.
- fair: 三方提供, 按后端服务器的响应时间来分配请求, 响应时间短的优先分配
- url_hash: 三方提供, 根据 URL 的 hash 值结果分配
# 基于权重负载均衡
upstream cluster01 {
# max_fails, fail_timeout 用来判断后端服务是否健康, 如果在 30s 内失败2次, 则失效
server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;
server localhost:8082 weight=1 max_fails=2 fail_timeout=30s;
}
# 基于 ip_hash 负载均衡
upstream cluster02 {
ip_hash;
server localhost:8083 fail_timeout=30s;
server localhost:8084 fail_timeout=30s;
}
配置文件详解
# 启动进程数, 生产设置成 CPU 核心数量
worker_processes 1;
# 错误日志
error_log logs/error.log error;
events {
# 单个进程最大并发连接数量
worker_connections 1024;
}
http {
# Mime 类型, 由 mime.type 文件定义
include mime.types;
default_type application/octet-stream;
# 访问日志
access_log logs/access.log info;
# 是否通过 zero copy 方式输出文件, 普通应用为 on, 对于下载类 中 I/O 应用, 可设置 off 用来平衡磁盘和网络 I/O 处理速度, 降低系统 uptime
sendfile on;
# 开启目录列表访问, 适合下载服务器, 默认关闭
autoindex off;
# 防止网络阻塞
tcp_nopush on;
# 保持客户端连接的超时时间(秒)
keepalive_timeout 65;
# 压缩静态资源
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
# 压缩级别, 值越小, 压缩比列也小, 但 CPU 处理更快
gzip_comp_level 2;
gzip_types text/html,text/xml,text/plain,text/css,text/javascript,application/json,application/xml,application/javascript,image/png
# 基于权重负载均衡
upstream cluster01 {
# max_fails, fail_timeout 用来判断后端服务是否健康, 如果在 30s 内失败2次, 则失效
server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;
server localhost:8082 weight=1 max_fails=2 fail_timeout=30s;
}
# 基于 ip_hash 负载均衡
upstream cluster02 {
ip_hash;
server localhost:8083 fail_timeout=30s;
server localhost:8084 fail_timeout=30s;
}
# 虚拟主机
server {
listen 80;
server_name 192.168.1.252;
## gogs
location /gogs/ {
proxy_pass http://192.168.1.252:3000/;
proxy_redirect default;
proxy_connect_timeout 900; # 连接超时时间
proxy_read_timeout 900; # 连接成功后, 服务响应时间
proxy_send_timeout 900; # 服务回传响应时间
client_max_body_size 1024m; # 允许请求最大值
}
# 开启 Nginx 监控
location /status {
stub_status on;
}
}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}