Nginx作为工作中常用的反向代理服务器,其配置我们是必须要熟悉的。今天主要介绍一下nginx的基本配置有哪些,以及这些配置的含义。首先我们看一下简单的nginx配置文件。
#user nobody;
worker_processes 4; #worder进程的进程数
#pid logs/nginx.pid;
worker_rlimit_nofile 66535;
events {
worker_connections 10240; #最大连接数
}
#http请求的配置
http {
#引入mine.types的配置文件
include mime.types;
#请求响应的默认数据类型
default_type application/octet-stream;
#客户端上送数据的最大大小
client_max_body_size 600M;
#表示从底层拷贝数据的时候可以跳过应用,直接从内核拷贝到网卡,加快速度。
sendfile on;
#长连接的保活时间,一个连接请求完成并不会立即销毁,通过这个属性可以再等一会儿,以便下次继续使用
keepalive_timeout 65;
#定义日志的格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" ($gzip_ratio) $request_time '
'"$upstream_addr" "$upstream_status" "$upstream_response_time" '
'"$uri" "$scheme" "$http_x_forwarded_proto"';
#访问日志的位置
access_log /var/log/nginx/access.log main;
#错误日志的地址
error_log /var/log/nginx/error.log error;
#开启gzip压缩
gzip on;
#开始压缩的最小长度
gzip_min_length 1k;
#缓冲在内存中的缓冲几块,每块多大
gzip_buffers 16 64k;
#开始压缩的http版本
gzip_http_version 1.1;
#压缩的级别,推荐6,级别越高压缩的越小范围是1-9
gzip_comp_level 6;
#压缩的文件类型
gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif;
#是否传输gzip压缩的标志
gzip_vary on;
#缓存路径,缓存文件目录层次,1:2表示两层目录,keys_zone表示缓存名字和共享内存大小。inactve指定时间内没人访问就将缓存删除,max_size表示最大缓存空间
proxy_cache_path nginx_cache levels=1:2 keys_zone=my_cache:100m inactive=1d max_size=10g;
#协议升级,和websocket有关
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
#路由机器配置
upstream jxmleditor {
server 192.168.21.119:8080 weight=1 max_fails=2 fail_timeout=30s;
}
#socket配置
upstream kmsocket {
server 192.168.21.119:8081 weight=1 max_fails=2 fail_timeout=30s;
}
#虚拟主机
server {
#监听80端口
listen 80;
server_name 10.120.130.33;
charset koi8-r;
#access_log logs/host.access.log main;
#重定向配置,如果是前边的配置,那么就重定向到后边
proxy_redirect http://at/foundation http://at/foundation;
location ^~ /JXmlEditor/ {
charset utf-8;
#连接超时时间
proxy_connect_timeout 8s;
#发送的超时时间
proxy_send_timeout 8s;
#读取下游连接的超时时间
proxy_read_timeout 8s;
#缓存的配置名称
proxy_cache tmp-test;
#对200等接口建立10天的缓存
proxy_cache_valid 200 206 304 301 302 10d;
#请求的缓存key为请求连接
proxy_cache_key $uri;
#使用真实的用户地址
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://jxmleditor/JXmlEditor/;
}
location ^~ /socket.io/ {
proxy_connect_timeout 4s;
proxy_send_timeout 12s;
#websocket的http配置
proxy_http_version 1.1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#websocket长连接读取时间配置,防止频繁断开连接
proxy_read_timeout 3600s;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
#协议升级
proxy_set_header Connection "upgrade";
proxy_set_header Connection $connection_upgrade;
proxy_pass http://kmsocket/socket.io/;
}
#手动清除缓存
location /tmp-test/ {
allow 127.0.0.1; //只允许本机访问
deny all; //禁止其他所有ip
#删除指定的请求的缓存
proxy_cache_purge tmp-test $uri; //清理缓存
}
}
}
根据上述的配置,基本的nginx配置就成型了。下面我们在学习一下其他的配置
一、防盗链配置
防盗链就是用来防盗的,说的明白一点就是一些网站的资源是不允许其他网站使用的,这里的被使用就是说别的网站通过代理直接调用我们服务器的静态资源的问题,解决这个问题这就是防盗链了。
location ~*\.(jpg|png|gif|css|js)$ {
root html/www/static/;
#只允许*.test.com域名访问静态资源
valid_referers blocked *.test.com;
if($invalid_referers){
return 403;
}
}
二、黑白名单配置
有时候我们的网站不想一些ip的机器访问,所以我们可以设置黑名单。我们可以在nginx的http模块中设置如下:
include black.ip;
在其中输入
deny 192.168.21.119;
在设置白名单的时候,可以新建一个white.ip的文件。
192.168.21.119 1;
然后修改配置文件中的http模块
geo $remote_addr $ip_whitelist {
default 0;
include white.ip;
}
location / {
if($ip_whitelist=0){
return 403;
}
root html;
index index.html;
}
}
三、网络限速配置
有时候我们还可以使用nginx对请求进行限速。配置如下.
location ~*\.(jpg|png|gif|css|js)$ {
root html/www/static/;
#如果限速了,那么下载的速度是1k
limit_rate 1k;
#小于2k的部分不限速,大于的部分限速
limit_rate_after 2k;
#只允许*.test.com域名访问静态资源
valid_referers blocked *.test.com;
if($invalid_referers){
return 403;
}
}
配置完毕之后,发现我们的网站响应贼慢。
四、日志配置
日志配置能够帮助我们查看问题,我们在开始的那个nginx配置中已经介绍了日志的格式配置。这里我们再说一下具体的配置含义。
$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user记录客户端用户名称
$request记录请求的URL和HTTP协议(GET,POST,DEL,等)
$status记录请求状态
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent发送给客户端的总字节数。
$connection连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器相关信息
$request_length请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local通用日志格式下的本地时间。