Nginx常用配置及和基本功能讲解-天天观点
作者:京东物流殷世杰
Nginx已经广泛应用于J-one和Jdos的环境部署上,本文对Nginx的常用的配置和基本功能进行讲解,适合Nginx入门学习。
(资料图)
找到Nginx安装目录下的conf目录下nginx.conf文件,Nginx的基本功能配置是由它提供的。
Nginx的配置文件(conf/nginx.conf)整体上分为如下几个部分: :
区域 | 职责 |
---|---|
全局块 | 配置和Nginx运行相关的全局配置 |
events块 | 配置和网络链接相关的配置 |
http块 | 配置代理、缓存、日志记录、虚拟主机等配置 |
server块 | 配置虚拟主机的相关参数,一个http快中可以有多个server块 |
location块 | 配置请求的路由,以及各种页面的处理情况 |
配置层级图如下所示。
1.2 配置文件示例一个比较全的配置文件示例如下。
# 以下是全局段配置#user administrator administrators; #配置用户或者组,默认为nobody nobody。#worker_processes 2; #设置进程数,默认为1#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址error_log log/error.log debug; #制定日志路径,级别:debug|info|notice|warn|error|crit|alert|emerg# events段配置信息events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off #use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大连接数,默认为512}# http、配置请求信息http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型,默认为text/plain #access_log off; #取消服务日志 log_format myFormat "$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for"; #自定义格式 access_log log/access.log myFormat; #combined为日志格式的默认值 sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。 sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。 keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 } error_page 404 https://www.baidu.com; #错误页 # 第一个Server区块开始,表示一个独立的虚拟主机站点 server { keepalive_requests 120; #单连接请求上限次数。 listen 4545; #监听端口 server_name 127.0.0.1; #监听地址 location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。 #root path; #根目录 #index vv.txt; #设置默认页 proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表 deny 127.0.0.1; #拒绝的ip allow 172.18.5.54; #允许的ip } }}
1.3 locat路径映射讲解1.3.1格式:location [ = | ~ | ~* | !~ | !~* | @ ] uri {...}
1.3.2解释:= 表示精确匹配,如果找到,立即停止搜索并立即处理此请求。表示执行一个正则匹配,区分大小写匹配~* 表示执行一个正则匹配,不区分大小写匹配
!~ 区分大小写不匹配
!~* 不区分大小写不匹配
^~ 即表示只匹配普通字符(空格)。使用前缀匹配,^表示“非”,即不查询正则表达式。如果匹配成功,则不再匹配其他location。
@ 指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files
uri 是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式;
1.3.3优先级和示例:[不加] < [/*] < [^~] < [=]
示例如下:
location = / { # 精确匹配/,主机名后面不能带任何字符串 / # 只匹配http://abc.com # http://abc.com [匹配成功] # http://abc.com/index [匹配失败]}location ^~ /img/ { #以 /img/ 开头的请求,都会匹配上 #http://abc.com/img/a.jpg [成功] #http://abc.com/img/b.mp4 [成功] }location ~* /Example/ { # 则会忽略 uri 部分的大小写 #http://abc.com/test/Example/ [匹配成功] #http://abc.com/example/ [匹配成功]}location /documents { # 如果有正则表达式可以匹配,则优先匹配正则表达式。 #http://abc.com/documentsabc [匹配成功]}location / { #http://abc.com/abc [匹配成功]}
2 反向代理2.1 反向代理概念:反向代理(Reverse Proxy)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
反向代理通过proxy_pass指令来实现。
2.2 反向代理示例:server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host:$server_port;#为请求头添加Host字段,用于指定请求服务器的域名/IP地址和端口号。 # 设置用户ip地址 proxy_set_header X-Forwarded-For $remote_addr;#为请求头添加XFF字段,值为客户端的IP地址。 # 当请求服务器出错去寻找其他服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
当我们访问localhost的时候,ngnix就将我们的请求转到 localhost:8081了
3 负载均衡3.1 负载均衡概念:当有2台或以上服务器时,代理服务器根据规则将请求分发到指定的服务器上处理。
3.2 负载均衡策略及示例:Nginx目前支持多种负载均衡策略,这里讲解常用的6种。
3.2.1RR(round robin :轮询 默认):每个请求按时间顺序逐一分配到不同的后端服务器,也就是说第一次请求分配到第一台服务器上,第二次请求分配到第二台服务器上,如果只有两台服务器,第三次请求继续分配到第一台上,这样循环轮询下去,也就是服务器接收请求的比例是 1:1, 如果后端服务器down掉,能自动剔除。轮询是默认配置,不需要太多的配置
同一个项目分别使用8081和8082端口启动项目
upstream web_servers { server localhost:8081; server localhost:8082;}server { listen 80; server_name localhost; #access_log logs/host.access.log main; location / { proxy_pass http://web_servers; proxy_set_header Host $host:$server_port; }
3.2.2 热备:假设有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂了,服务器处理请求的顺序:BBBBBBBBBBBBBB.....
upstream web_servers { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #热备 }
3.2.3 权重跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....。
upstream web_servers { server localhost:8081 weight=1; server localhost:8082 weight=2;}
3.2.4 ip_hash这样每个ip地址固定访问一个后端服务器,可以解决session的问题。
upstream test { ip_hash; server localhost:8080; server localhost:8081;}
3.2.5 fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应。
upstream backend { fair; server localhost:8080; server localhost:8081;}
3.2.6 url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法
upstream backend { hash_method crc32; hash $request_uri; server localhost:8080; server localhost:8081;}
以上6种负载均衡各自适用不同情况下单独或者混合使用,可以根据实际情况选择使用,fair和url_hash需要安装第三方模块才能使用。
4 动静分离:4.1 动静分离概念:动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
4.2 动静分离示例:upstream web_servers { server localhost:8081; server localhost:8082;}server { listen 80; server_name localhost; set $doc_root /usr/local/var/www; location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ { root $doc_root/img; } location / { proxy_pass http://web_servers; proxy_set_header Host $host:$server_port; } error_page 500 502 503 504 /50x.html; #出现 500 502 503 504错误时走内部跳转 location = /50x.html { root $doc_root; } }
结果:访问http://localhost/test.jpg时直接返回/usr/local/var/www/img路径下的图片.
访问http://localhost/index.html就会访问后端服务器(tomcat等)
5 其他常用的指令:5.1.return指令返回http状态码和可选的第二个参数可以是重定向的URL
return code [text];return code URL;return URL;例如:location / { return 404; # 直接返回状态码}location / { return 404 "pages not found"; # 返回状态码 + 一段文本}location / { return 302 /bbs ; # 返回状态码 + 重定向地址}location / { return https://www.baidu.com ; # 返回重定向地址}
5.2 rewrite指令重写URI请求 rewrite,通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。
第一个(必需)参数是请求URI必须匹配的正则表达式。
第二个参数是用于替换匹配URI的URI。
可选的第三个参数重写策略
last 重写后的 URL 发起新请求,再次进入 server 段,重试 location 的中的匹配;
break 直接使用重写后的 URL ,不再匹配其它 location 中语句;
redirect 返回302临时重定向;
permanent 返回301永久重定向;
location /users/ { rewrite ^/users/(.*)$ /show?user=$1 break;}
5.3 error_page指令使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。
server{ error_page 500 502 503 504 /50x.html; location =/50x.html{ root html; } }
5.4 日志访问日志:需要开启压缩 gzip on; 否则不生成日志文件,打开log_format、access_log注释
log_format main "$remote_addr - $remote_user [$time_local] "$request" " "$status $body_bytes_sent "$http_referer" " ""$http_user_agent" "$http_x_forwarded_for"";access_log /usr/local/etc/nginx/logs/host.access.log main;gzip
5.5 deny 、allow指令#禁止访问某个目录location / { allow 192.168.0.0; allow 127.0.0.1; deny all;#这段配置值允许192.168.0./24网段和127.0.0.1的请求,其他来源IP全部拒绝。}
5.6 内置变量nginx的配置文件中可以使用的内置变量以美元符$开始。其中,大部分预定义的变量的值由客户端发送携带。
\(args :#这个变量等于请求行中的参数,同\)query_string
$content_length :请求头中的Content-length字段。
$content_type :请求头中的Content-Type字段。
$document_root :当前请求在root指令中指定的值。
$host :请求行的主机名,为空则为请求头字段 Host 中的主机名,再为空则与请求匹配的server_name
$http_user_agent :客户端agent信息
$http_cookie :客户端cookie信息
$limit_rate :这个变量可以限制连接速率。
$request_method :客户端请求的动作,通常为GET或POST。
$remote_addr :客户端的IP地址。
$remote_port :客户端的端口。
$remote_user :已经经过Auth Basic Module验证的用户名。
$request_filename :当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme :HTTP方法(如http,https)。
$server_protocol :请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr :服务器地址,在完成一次系统调用后可以确定这个值。
$server_name :服务器名称。
$server_port :请求到达服务器的端口号。
$request_uri :包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
\(uri :不带请求参数的当前URI,\)uri不包含主机名,如”/foo/bar.html”。
\(document_uri :与\)uri相同
6 总结Ngnix是一款高性能反向代理服务器,学习它非常有必要,本文讲解了Ngnix核心配置,介绍了反向代理,负载均衡,动静分离三大功能,最后扩展了一些常用的指令。本文介绍了Ngnix的基础用法,后续的Ngnix内核以及原理部分有待研究。
标签:

进入了发展快车道 冷链行业市场规模正在快速膨胀
2022-03-21

行业正站在风口 数字化时代在为传统的自行车产业赋能
2022-03-21

以做强实体经济支撑为重点 成都单个项目年度计划投资同比提升
2022-03-21

拥有多个国际赛事的直播版权 广州游戏电竞企业业绩向好
2022-03-21

投诉量激增 直播带货存在这么多问题的主要原因是什么?
2022-03-21

工作专班深入到各企业 春寒料峭挡不住松原市施工热情
2022-03-21

引导企业向提供“产品+服务”转变 湖南加快智能农机服务化转型
2022-03-21

创新平台建设和科技成果转化 德州加大力度重奖创新
2022-03-21

潜在风险进一步放大 商品房现房销售已是大势所趋
2022-03-21

有序复工复产 1—2月份工业经济发展新动能持续增强
2022-03-21
行业正站在风口 数字化时代在为传统的自行车产业赋能
以做强实体经济支撑为重点 成都单个项目年度计划投资同比提升
拥有多个国际赛事的直播版权 广州游戏电竞企业业绩向好
投诉量激增 直播带货存在这么多问题的主要原因是什么?
工作专班深入到各企业 春寒料峭挡不住松原市施工热情
引导企业向提供“产品+服务”转变 湖南加快智能农机服务化转型
创新平台建设和科技成果转化 德州加大力度重奖创新
潜在风险进一步放大 商品房现房销售已是大势所趋
有序复工复产 1—2月份工业经济发展新动能持续增强
多层次高频调度 1至2月河北省工业运行先行指标稳中有增
以车路协同为基础 智能交通推动城市交通绿色高质量发展
人才短板成为制约产业链高质量发展的关键节点
通过技术手段整合调配供给资源 家政行业不断提质扩容
强化产业链深层次合作 加强重大装备国产化“一条龙”模式构建
如何进一步提升纳税人缴费人的减税降费获得感?
探索建设大数据及网络安全示范试点城市有哪些积极意义?
对制造业中小微企业实施缓缴税费政策有哪些积极意义?
进一步增强自我保护意识 消费者需注意辨别谨慎消费
将“走出去”变“请进来” 西安贸易产业转移承接作用不断得到增强
厦门应如何融入“数字中国”的重大战略发展大局?
江苏省如何不断满足老人日益增长的养老服务需求?
建设一体化的职业健康信息管理平台 天津职业人群保障加强
潜力持续释放 1—2月乡村消费品市场恢复略好于城镇
直接对接社会化服务 楼宇调解室将整体提升青岛劳动争议水平
成功化解纠纷11.47万件 银保监会服务质量日趋提高
春雷响百虫出 惊蛰文化在其他方面有了进一步发展
青绿山水画在古代山水画发展史上有着怎样的影响与地位?
开播即爆款 “文化类节目收视率低”这一固有印象被推翻
涵盖了109件真迹作品 凯斯·哈林展览将持续至6月13日


- 带有一点自信的自嘲 “隔路”是另一种味道的“凡尔赛”
- 与文渊阁前后呼应 “何以中国”特展隆重致敬文化大成
- 严重者可造成暂时性失明 享受冰雪运动要注意眼睛的健康防护
- 种类繁多让人眼花缭乱 选购牛奶时需要重点关注什么?
- 网课让孩子感到不安焦虑怎么办?八问八答回应广大家长关切
- 循环系统很容易受到刺激 “倒春寒”期间老人该如何做?
- 青少年患者睡眠问题日趋增加 9条建议为孩子助眠
- 我国肥胖人群正逐年递增 不良饮食习惯是重要诱因
- 如何减少噪声对听力的损伤?这份耳部和听力保健小贴士请收好
- 强化住房限购措施 西安限购限售范围进一步扩大
- 多种方式增加供给 进一步降低新市民和青年人的居住成本
- 预计9月下旬海口可实现安居房申请网上办理
- 政策调控力度持续升级 8月百城二手房市场均价止涨转跌
- 8月中国新房找房热度依然保持平稳 环比微涨0.2%
- 进一步加强商品房销售价格备案管理 今年全国楼市调控刷新历史纪录
- 西安第二批集中供地中28宗为现场拍卖方式出让
- 细分化需求得到释放 房屋居住的属性越发凸显
- 佛山顺德龙江近日挂牌商住地起拍价约19.88亿元
- 青岛市4宗地竞品质抽签结果出炉 地溢价均约15%
- 坚持政策支持、多方参与 浙江版保障性租赁住房明确新增比例目标
- 简化审批流程 武汉将实现房源申请配租全程网上办
- 哈尔滨新增本土确诊病例3例 活动轨迹公布
- 哈尔滨市公布3例新增本土新冠肺炎确诊病例活动轨迹
- 山东深耕文化资源 推动旅游业高质量发展
- 今年新增952件(套)!南京大屠杀再添新证
- 四川非遗传承人张雄志:巧手捏面塑 指尖传非遗
- 10月以来我国寒潮为何如此频繁?中国气象局回应
- 56位残疾人士登上黄山 互利互勉共建生活希望
- 安徽潜山两车相撞 已致8人死亡3人受伤
- 上海洋山海关首次在出口货运渠道查获夹带卷烟
- 山西忻州古城:一城风华延续千年历史文脉
- 呼伦贝尔新巴尔虎右旗公布1例无症状感染者行动轨迹
- 新增“53+1” 内蒙古累计本土确诊病例增至185例
- 昆明公安打击破坏生物多样性犯罪 抓获130名涉案嫌疑人
- 山西朔州“11·11”较大透水事故调查报告发布 对38人问责处理
- “海关国门小卫士”竞争上岗 淘汰率接近一半
- 深圳摧毁特大品牌化妆品走私网
- 28人被问责!山西石港煤业“3·25”事故调查报告公布
- 湖南韶山以河长制带动全民治水 让每一处水面“长治久清”
- 上海市奉贤区人大常委会原党组书记袁晓林被“双开”
- 民进会员谈反映社情民意信息工作:心怀大我 敢讲实情
- 80岁“留守”奶奶短视频诉孤独 千万网友心疼:我们陪您唠嗑
- 40年来为子弟兵送出1.3万余双布鞋和鞋垫的“布鞋奶奶”走了
- 当男幼师是什么体验?他们说:有委屈尴尬 但大部分是幸福
- 庐阳警方通报幼童坠亡事件:嫌疑人已被刑拘
- 内蒙古新增本土确诊病例53例、本土无症状感染者1例
- 哈尔滨市启动部分地区第一轮全员核酸检测
- 四川通江发生两车相撞事故 致3人死亡
- 11月谣言在“身边”,别信这些无稽之谈
- 追剧为何上瘾?你追的不是剧,而是及时满足的快感