1.1. 静态服务器
server {
listen 80;
server_name b.test.com;
root /data/www/test/;
index index.html index.htm;
}
1.2. 反向代理
server {
listen 80;
server_name b.test.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.0.100.63;
}
}
Host:客户端访问的主机地址
X-Real-IP:用于记录真实客户端IP(发送请求的真实IP,多级代理,即上一级代理)
X-Forwarded-For:是用于记录代理信息,每经过一级代理(匿名代理除外)的IP
格式:client, proxy1, proxy2
1.3. 负载均衡
upstream test {
server 192.168.2.10:8000 weight=5;
server 192.168.2.11:8000 weight=5 max_conns=800;
server 192.168.2.12:8000 weight=5 max_fails=1 fail_timeout=30s;
}
weight:权重,值越大,访问的比例越大
max_conns:最大连接数
max_fails:最大失败次数,与fail_timeout配合使用
fail_timeout:失败检测周期,例:30s内失败1次,将server标记为down,等待30s不接受请求,30s再接收请求进行检测
down:表示单前的server暂时不参与负载
backup:备用server,其它server繁忙或者down时,请求此server
1.3.1. 算法
轮询(默认)
1:1处理请求
upstream test {
server 192.168.2.10:8000;
server 192.168.2.11:8000;
}
权重
根据权重值比例处理请求,值越大,请求比例越大
upstream test {
server 192.168.2.10:8000 weight=1;
server 192.168.2.11:8000 weight=2;
}
ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
upstream test {
ip_hash;
server 192.168.2.10:8000;
server 192.168.2.11:8000;
}
least_conn最小连接
比较每个后端的conns/weight,选取该值最小的后端。
least_time最小响应时间
1.4. SSL
server {
listen 443;
server_name b.test.com;
ssl on;
root /data/www/test/;
index index.html index.htm;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
# 配置http跳转https
server {
listen 80;
server_name b.test.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
1.5. PHP-FPM
server {
listen 80 default_server;
server_name _;
root /data/www/demo;
index index.html index.htm index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
}
1.6. 缓存
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 12h;
access_log off;
}
1.7. 正则规则
=:精确配置
~:区分大小写匹配
~*:不区分大小写匹配
^:匹配字符串的开始位置
$:匹配字符串的结束位置
.:匹配除换行符以外的任意字符
[a-z]:匹配a~z的任意单个字母
\d:匹配数字
\w:匹配字母、数字、下划线、汉字
\s:匹配任意的空白符
(png|jpg|bmp):匹配png或jpg或bmp
*:重复0次或多次
?:重复0次或1次
+:重复1次以上
{n,m}:重复n~m次