nginx.conf 核心配置文件
- 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobody
user root; - worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
worker_processes 1; - nginx 日志级别 debug | info | notice | warn | error | crit | alert | emerg ,错误级别从左到右越来越大
- 设置nginx进程 pid
pid logs/nginx.pid; - 设置工作模式
events {
默认使用epoll
use epoll;
每个worker允许连接的客户端最大连接数
worker_connections 10240;
}
- http 是指令块,针对http网络传输的一些指令配置
http {
}
- include 引入外部配置,提高可读性,避免单个配置文件过大
include mime.types; - 设定日志格式, main 为定义的格式名称,如此 access_log 就可以直接使用这个变量了
参数名 参数意义
$remote_addr 客户端ip
$remote_user 远程客户端用户名,一般为:’-’
$time_local 时间和时区
$request 请求的url以及method
$status 响应状态码
$body_bytes_send 响应客户端内容字节数
$http_referer 记录用户从哪个链接跳转过来的
$http_user_agent 用户所使用的代理,一般来时都是浏览器
$http_x_forwarded_for 通过代理服务器来记录客户端的ip
- sendfile 使用高效文件传输,提升传输性能。启用后才能使用 tcp_nopush ,是指当数据表累积一定大小后才发送,提高了效率。
sendfile on;
tcp_nopush on;
- keepalive_timeout 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0; keepalive_timeout 65;
root 与 alias
- 假如服务器路径为:/home/imooc/files/img/face.png
- root 路径完全匹配访问
- 配置的时候为:
location /imooc {
root /home
}
- 用户访问的时候请求为: url:port/imooc/files/img/face.png
- alias 可以为你的路径做一个别名,对用户透明
- 配置的时候为:
location /hello { root /home/imooc }
用户访问的时候请求为: url:port/hello/files/img/face.png ,如此相当于为目录 imooc 做一个自定义的别名。
location 的匹配规则
空格 :默认匹配,普通匹配
location / {
root /home;
}
= :精确匹配
root /home;
}
~* :匹配正则表达式,不区分大小写
location ~ \.(GIF|jpg|png|jpeg) {
root /home;
}
~ :匹配正则表达式,区分大小写
location ~ \.(GIF|jpg|png|jpeg) {
root /home;
}
^~ :以某个字符路径开头
root /home;
}
Nginx 跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
location / {
root html;
index index.html index.htm;
}
}
Nginx 防盗链配置支持
#对源站点验证
valid_referers *.imooc.com;
#非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}
location / {
root html;
index index.html index.htm;
}
}
upstream 指令参数
solw_start 设置一个时间 在这个时间内会慢慢的将 目标服务器的权重慢慢提高至设定的值
down 设置目标服务器宕机
backup 设置目标服务器作为备用机,当其他服务器全都宕机后就会运行当前服务器
max_fails 最大请求失败数一般配合fail_timeout使用
fail_timeout 设置监听服务器请求判断当前服务是否还能继续进行请求
upstream 指令参数 max_conns
#测试参考配置如下:
#worker进程设置1个,便于测试观察成功的连接数
worker_processes 1;
#配置集群服务器
upstream tomcats {
#weigth 权重 值越大优先级越大
#max_conns 限制当前服务器最大连接数
server 192.168.1.173:8080 weigth=1;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
server {
listen 80;
sever_name localhost;
location / {
#http://tomcats 指向upstream配置的名字 需要带http
proxy_pass http://tomcats;
}
}
upstream 指令参数 slow_start
#slow_start 只有商业版的nginx才可以使用
#设置一个时间 在这个时间内会慢慢的将 目标服务器的权重慢慢提高至设定的值
server 192.168.1.173:8080 weigth=6 slow_start = 60s;
server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
}
Keepalived 提高吞吐量
#proxy_http_version :设置长连接http版本为1.1
#proxy_set_header :清除connection header 信息
upstream tomcats {
# server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
server 192.168.1.190:8080;
# server 192.168.1.174:8080 weight=1;
# server 192.168.1.175:8080 weight=1;
keepalive 32;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
负载均衡 url_hash 与 least_conn
upstream tomcats {
#ip_hash 根据IP进行hash算法
# url hash 根据url 进行hash算法
hash $request_uri;
# 最少连接数
# least_conn
server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;
}
server {
listen 80;
server_name www.tomcats.com;
location / {
proxy_pass http://tomcats;
}
}
Nginx的缓存
- 浏览器缓存:
加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地 - Nginx缓存
缓存在nginx端,提升所有访问到nginx这一端的用户
提升访问上游(upstream)服务器的速度
用户访问仍然会产生请求流量
控制浏览器缓存:
alias /home/imooc;
# expires 10s; 10秒后清除缓存
# expires @22h30m; 设置在晚上10点30分清楚缓存
# expires -1h;
# expires epoch;
# expires off;
expires max;
}
Nginx的反向代理缓存
# keys_zone 设置共享内存以及占用空间大小
# max_size 设置缓存大小
# inactive 超过此时间则被清理
# use_temp_path 临时目录,使用后会影响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;
# 启用缓存,和keys_zone一致
proxy_cache mycache;
# 针对200和304状态码缓存时间为8小时
proxy_cache_valid 200 304 8h;
}