Nginx配置2-http块配置
http配置块
http配置块包括http-全局块、http-server块、upstream 块儿。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
http-全局块
mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
#默认文件类型
default_type application/octet-stream;
#设定日志格式(自定义)
log_format ownformat '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /home/nginx/log/http_access.log ownformat;
#对于普通应用,设为on可以减少文件拷贝次数,如果图片显示不正常把这个改成off。
sendfile on; #off模式拷贝路径:硬盘—>内核fs缓冲区—>用户空间—>内核socket缓冲区—>协议引擎
# on模式拷贝路径1: 硬盘—>内核fs缓冲区—>内核socket缓冲区—>协议引擎
# on模式拷贝路径2: 硬盘—>内核fs缓冲区—>协议引擎
tcp_nopush on #在linux/Unix系统中优化tcp数据传输,仅在sendfile开启时有效
#tcp_nodelay on; #TCP_NODELAY选项来禁用Nagle的缓冲算法,并在数据可用时立即发送与tcp_nopush互斥
keepalive_timeout 120; #长连接超时时间,单位是秒
send_timeout 30; #指定客户端的响应超时时间
gzip on; #开启gzip压缩输出
gzip_http_version 1.0; #压缩版本
gzip_comp_level 2; #压缩级别,1-10,数字越大压缩的越好
gzip_min_length 1k; #设置允许压缩的页面最小字节数
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
gzip_disable "MSIE [1-6]."; #IE6及以下禁止压缩
}
#日志格式(自定义)
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local: 用来记录访问时间与时区;
#$request: 用来记录请求的url与http协议;
#$status: 用来记录请求状态;成功是200,
#$body_bytes_sent :记录发送给客户端文件主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent:记录客户浏览器的相关信息;
#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
http-server块
配置虚拟主机的相关参数,包含server全局块和location块
server全局块
server {
listen 80; #描述虚拟主机接受连接的地址和端口
server_name localhost; #内网:主机名,外网:域名 可以是多个域名,用空格隔开
access_log /home/nginx/log/server_localhost_access.log ownformat;
index index.html index.htm index.jsp; #默认访问主页
root /nginx/www/webapps; #主目录
}
server {
listen 192.168.1.101:8080; # 监听具体IP和具体端口上的连接
...
}
server {
listen 80;
server_name example.com www.example.com; #基于域名的虚拟主机(server_name)
}
server {
listen 80;
server_name example.com www.example.com; #基于域名的虚拟主机(server_name)
}
server {
listen 192.168.1.1:80;
server_name example.net www.example.net; #基于域名和IP混合的虚拟主机
}
#nginx支持三种类型的虚拟主机配置
#- 基于ip的虚拟主机(一块物理服务器绑定多个ip地址)
#- 基于域名的虚拟主机(server_name)
#- 基于端口的虚拟主机(listen不写ip,端口模式)
location块
为具体的请求URI配置请求路由,可以实现默认主页、错误提示页面、静态文件处理、反向代理等功能
location = / { #注意URL最好为具体路径。 uri严格匹配指定的路径,不包括子路径
[ configuration A ]
}
location / { #对当前路径及子路径下的所有对象都生效;
[ configuration B ]
}
location ~ URI {} { #~区分字符大小写
[ configuration C ]
}
location ^~ /images/ { #禁用正则表达式
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ { #~*不区分字符大小写
[ configuration E ]
}
#默认请求
location / {
#定义首页索引文件的名称
index index.php index.html index.htm;
}
# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
error_page 400 402 403 404 /40x.html;
location = /40x.html {
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
expires 30d;
}
#所有jsp的页面均交由tomcat或weblogic处理
location ~ .(jsp|jspx|do)?$ {
#指向weblogic服务器
proxy_pass http://127.0.0.1:700;
#将主机跟真实IP写入HTTP头中
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
upstream 块儿
#upstream可以实现负载均衡
upstream httpds {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
#- down:表示当前的server暂时不参与负载
#- weight:默认为1.weight越大,负载的权重就越大。
#- backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
#负载均衡算法:
#1、轮询(默认)
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
#2、weight
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
#3、ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
#4、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
#5、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
参考
Nginx sendfile原理详解
TCP_NODELAY 和 TCP_NOPUSH的解释