########### 每个指令必须有分号结束。#################
# 运行用户
user www-data;
# 启动进程,通常设置成和cpu的数量相等
worker_processes 6;
# 全局错误日志定义类型,日志级别 [debug | info | notice | warn | error | crit(默认)]
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
# 进程pid文件
pid /var/run/nginx.pid;
# 工作模式及连接数上限
events {
#设置网路连接序列化,防止惊群现象发生,默认为on
accept_mutex on;
# 仅用于linux2.6以上内核,可以大大提高nginx的性能
#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
use epoll;
# 单个后台worker process进程的最大并发链接数
worker_connections 1024;
# 客户端请求头部的缓冲区大小
client_header_buffer_size 4k;
# keepalive 超时时间
keepalive_timeout 60;
#设置一个进程是否同时接受多个网络连接,默认为off
# multi_accept on;
}
# 代理 tcp 端口 nginx 版本大于1.9默认是支持 TCP 代理的
# 这个示例我们将本地的1389端口转发到192.168.1.8的389端口上
stream {
upstream ldap {
hash $remote_addr consistent;
server 192.168.1.8:389;
}
server {
listen 1389;
proxy_connect_timeout 5s;
proxy_timeout 5s;
proxy_pass ldap;
}
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
# 文件扩展名与文件类型映射表义
include /etc/nginx/mime.types;
# 默认文件类型
default_type application/octet-stream;
# 默认编码
charset utf-8;
# 服务器名字的hash表大小
server_names_hash_bucket_size 128;
# 客户端请求头部的缓冲区大小
client_header_buffer_size 32k;
# 客户请求头缓冲大小
large_client_header_buffers 4 64k;
# 设定通过nginx上传文件的大小
client_max_body_size 8m;
# 开启目录列表访问,合适下载服务器,默认关闭。
autoindex on;
# sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
# 必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度
sendfile on;
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
# 此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
#tcp_nopush on;
# 连接超时时间(单秒为秒)
keepalive_timeout 65;
# gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
# 开启限制IP连接数的时候需要使用
#limit_zone crawler $binary_remote_addr 10m;
# 负载均衡配置
#默认情况下,使用加权轮训方法在服务器之间分配请求。在上面的例子中,每7个请求将按如下方式分配:5个请求分配给192.168.110.102:8081并且
#向第二和第三服务器中的每一个发送一个请求。如果在与服务器通信的过程中出现错误,请求将被传递到下一个服务器
#依此类推,直到所有正常工作的服务器都被尝试过。如果无法从任何服务器获得成功的响应,客户端将收到与最后一个服务器通信的结果。
upstream mysvr {
# https://www.cnblogs.com/xuey/p/7439695.html
}
#nginx负载均衡的5种策略
#轮训(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。轮训其实为weight=1
upstream backend {
server 192.168.110.102:8081;
server 192.168.110.102:8082;
}
#weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backend {
server 192.168.110.102:8081 weight=3;
server 192.168.110.102:8082 weight=7;
}
#ip_hash 在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
#我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backend {
ip_hash;
server 192.168.110.102:8081;
server 192.168.110.102:8082;
}
#fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server 192.168.110.102:8081;
server 192.168.110.102:8082;
fair;
}
#url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。
upstream backend {
server 192.168.110.102:8081;
server 192.168.110.102:8082;
hash $request_uri;
hash_method crc32;
}
#其他指令
#最大连接数:max_conns=number max_conns属性是用来限制同时连接到upstream负载上的单个服务器的最大连接数,作用是可以对单个服务器进行限流,防止服务器超负荷运转. 默认值为0,则表示没有限制
upstream backend {
server 192.168.110.102:8081 max_conns=2;
}
#最大失败次数(默认1次):max_fails=number
#失败时间(默认10s):fail_timeout=time 在失败时间内请求某一server失败达到最大失败次数后,则认为该server已经挂了或者宕机了,随后的失败时间之内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server
#失败时间后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复
upstream backend {
server 192.168.110.102:8081 max_fails=2 fail_timeout=15s;
server 192.168.110.102:8082;
server 192.168.110.102:8083;
}
#down 将服务器标记为永久不可用
upstream backend {
server 192.168.110.102:8081 down; # 将服务器标记为永久不可用
}
#keepalive connections 长连接数是为了解决在高延迟网络上建立tcp连接的延迟问题,适当的配置长连接数,能够增加吞吐量及响应速度。
#这 connections 参数设置每个工作进程的缓存中保留的到上游服务器的最大空闲keepalive连接数。当超过这个数量时,最近最少使用的连接将被关闭。
#应该特别注意的是 keepalive 指令不限制nginx工作进程可以打开的上游服务器连接的总数。这connections参数应该设置为一个足够小的数字,以便上游服务器也能处理新的传入连接。
upstream backend {
server 192.168.110.102:8081;
keepalive 16; # 这个配置值应尽量保持小一些
}
server {
...
location /http/ {
proxy_pass http://backend;
proxy_http_version 1.1; # 对于HTTP来说proxy_http_version指令应设置为1.1
proxy_set_header Connection ""; # 清除“连接”头字段
...
}
}
#backup:其它所有的非backup机器down或者忙的时候,请求backup机器
upstream upstream {
server 192.168.110.102:8081 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
#错误页,这里可以统一定义,也可在 server 中分别定义
error_page 404 http://www.myhost.com/404.html;
# http 虚拟主机的配置
server {
#单连接请求上限次数
keepalive_requests 120;
# 监听端口
listen 80;
# 域名可以有多个,用空格隔开
server_name www.jd.com jd.com;
# 默认入口文件名称
index index.html index.htm index.php;
# 网站根目录
root /data/www/jd;
# 图片缓存时间设置
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*.(js|css)?${
expires 1h;
}
# 日志 star ----- 可以放 http 中统一定义,也可 server 块中单独(分别)定义
#access_log off; #取消服务日志
# 日志格式设定
#$remote_addr与 $http_x_forwarded_for用以记录客户端的ip地址;
#$remote_user:用来记录客户端用户名称;
#$time_local:用来记录访问时间与时区;
#$request:用来记录请求的url与http协议;
#$status:用来记录请求状态;成功是200,
#$body_bytes_sent :记录发送给客户端文件主体内容大小;
#$http_referer:用来记录从那个页面链接访问过来的;
#$http_user_agent :记录客户端浏览器的相关信息;
#自定义日志格式
#$remote_addr:客户端地址 $remote_user:客户端用户名称 $time_local:访问时间和时区 $request:请求的URI和HTTP协议 $http_host:请求地址,即浏览器中你输入的地址(IP或域名) $status:HTTP请求状态 $upstream_status:upstream状态 $body_bytes_sent:发送给客户端文件内容大小 $http_referer:url跳转来源 $http_user_agent:用户终端浏览器等信息 $ssl_protocol:SSL协议版本 $ssl_cipher:交换数据中的算法 $upstream_addr:后台upstream的地址,即真正提供服务的主机地址;当ngnix做负载均衡时,可以查看后台提供真实服务的设备 $request_time:整个请求的总时间 $upstream_response_time:请求过程中,upstream响应时间
log_format main '[$upstream_addr] - $remote_addr - $remote_user [$time_local] - [$request_time] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 定义本虚拟主机的访问日志
access_log /usr/local/nginx/logs/myhost.access.log main;
# 日志 end ------------------------------------
# 对具体路由进行反向代理
location /connect-controller {
# 代理转发 https://www.cnblogs.com/vicky-li/p/10411104.html
proxy_pass http://127.0.0.1:88;
proxy_redirect off; // 修改代理服务器返回的响应头的 location 头域 跟 refresh 头域值,off 禁止 所有 proxy_redirect 指令
#只要用户在浏览器中访问的域名绑定了 VIP, VIP 下面有RS;则就用$host;host是访问URL中的域名和端口 www.taobao.com:80
proxy_set_header Host $host;
#把源IP 【$remote_addr,建立HTTP连接header里面的信息】赋值给X-Real-IP;这样在代码中 $X-Real-IP来获取 源IP
proxy_set_header X-Real-IP $remote_addr;
#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来,用 【,】隔开;代码中用 echo $x-forwarded-for |awk -F, '{print $1}' 来作为源(真实)IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 允许客户端请求的最大单文件字节数
client_max_body_size 10m;
# 缓冲区代理缓冲用户端请求的最大字节数,
#如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,
#无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
client_body_buffer_size 128k;
# 表示使nginx阻止HTTP应答代码为400或者更高的应答。
proxy_intercept_errors on;
# nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
# 后端服务器数据回传时间(代理发送超时)
# 后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 90;
# 连接成功后,后端服务器响应的超时时间
# 连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 90;
# 设置代理服务器(nginx)保存用户头信息的缓冲区大小
# 设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffer_size 4k;
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
proxy_buffers 4 32k;
# 高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
# 设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
# 设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
# 动静分离反向代理配置(多路由指向不同的服务端或界面)
location ~ .(jsp|jspx|do)?$ {
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://127.0.0.1:8080;
}
# 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
location ~*^.+$ {
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
#将请求转成https,路由重写,可以写在location块中
rewrite ^(.*)$ https://$host$1 permanent;
# 指定虚拟主机的配置文件,方便管理
include /etc/nginx/conf.d/*.conf;
}
# https 连接
server {
# https 端口
listen 443;
# 网站域名
server_name myhoust.com www.myhost.com;
# 开启ssl,证书地址
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
#文件夹
root /usr/local/service/ROOT;
#主页文件
index index.html;
}
}
}
nginx配置文件详解
最新推荐文章于 2024-05-23 16:42:11 发布