Nginx知多少系列之(三)配置文件详解
目录
1.前言
2.安装
3.配置文件详解
4.工作原理
5.Linux下托管.NET Core项目
6.Linux下.NET Core项目负载均衡
7.负载均衡策略详解
8.加权轮询(round robin)策略剖析
9.IP哈希(ip hash)策略剖析
10.最少连接(least_conn)策略剖析
11.随机(random)策略剖析
12.URL哈希(url hash)策略剖析
13.响应时间(fair)第三方模块详解
14.Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
15.Linux下.NET Core项目Nginx+Keepalived高可用(双主模式)
16.Linux下.NET Core项目LVS+Keepalived+Nginx高可用集群
17.构建静态服务器
18.日志分析
19.优化策略
20.总结
Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块可以帮助我们实现Web服务器上很多的功能。使用这些模块时,仅仅需要增加、修改一些配置项即可。
1.目录结构介绍
Nginx运行目录为/usr/local/nginx,其目录结构如下:
|---client_body_temp
|---conf
---fastcgi.conf
---fastcgi.conf.default
---fastcgi_params
---fastcgi_params.default
---koi-utf
---koi-win
---mime.types
---mime.types.default
---nginx.conf
---nginx.conf.default
---scgi_params
---scgi_params.default
---uwsgi_params
---uwsgi_params.default
---win-utf
|---fastcgi_temp
|---html
---50x.html
---index.html
|---logs
---access.log
---error.log
---nginx.pid
|---proxy_temp
|---sbin
---nginx
|---scgi_temp
|---uwsgi_temp
①、client_body_temp:如果客户端POST一个比较大的文件,长度超过了nginx缓冲区的大小,需要把这个文件的部分或者全部内容暂存到client_body_temp目录下的临时文件。
②、conf:这是Nginx所有配置文件的目录,极其重要
fastcgi.conf:fastcgi相关参数的配置文件
fastcgi.conf.default:fastcgi.conf的原始备份
fastcgi_params:fastcgi的参数文件,nginx配置Fastcgi解析时会调用fastcgi_params配置文件来传递服务器变量,这样CGI中可以获取到这些变量的值。
fastcgi_params.default:fastcgi_params.conf的原始备份
mime.types:文件扩展名与文件类型映射表,nginx根据映射关系,设置http请求响应头的Content-Type值。当在映射表找不到时,使用nginx.conf中default-type指定的默认值。例如,默认配置中的指定的default-type为application/octet-stream。
mime.types.default:mime.types的原始备份
nginx.conf:这是Nginx默认的主配置文件
nginx.conf.default:nginx.conf的原始备份
koi-utf、koi-win、win-utf:这三个文件都是与编码转换映射文件,用于在输出内容到客户端时,将一种编码转换到另一种编码。
koi-win: charset_map koi8-r < -- > windows-1251
koi-utf: charset_map koi8-r < -- > utf-8
win-utf: charset_map windows-1251 < -- > utf-8
koi8-r是斯拉夫文字8位元编码,供俄语及保加利亚语使用。在Unicode未流行之前,KOI8-R 是最为广泛使用的俄语编码,使用率甚至起ISO/IEC 8859-5还高。这3个文件存在是因为作者是俄国人的原因。
scgi_params:scgi的参数文件
scgi_params.default:scgi_params.conf的原始备份
uwsgi_params:uwcgi的参数文件
uwsgi_params.default:uwsgi_params.conf的原始备份
③、fastcgi_temp:Fastcgi的临时数据目录
④、html:默认站点目录
50x.html:错误页面优雅替代显示文件,例如:出现502错误时会调用此页面
index.html:默认的首页文件,首页文件名字是在nginx.conf中事先定义好的。
⑤、logs:这是Nginx默认的日志路径,包括错误日志及访问日志
access.log:这是Nginx的默认访问日志文件,使用tail -f access.log,可以实时观看网站用户访问情况信息
error.log:这是Nginx的错误日志文件,如果Nginx出现启动故障等问题,一定要看看这个错误日志
nginx.pid:Nginx的pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
⑥、proxy_temp:反向代理缓存目录
⑦、sbin:这是Nginx命令的目录,如Nginx的启动命令nginx
nginx:Nginx的启动命令nginx
⑧、scgi_temp:scgi临时目录
⑨、uwsgi_temp:uwscgi临时目录
因为有的暂时还没有用到,所以下面我们重点介绍conf配置文件
2.Nginx.conf配置详解
Nginx的指令具体如何使用,我们可以看官方介绍:http://nginx.org/en/docs/dirindex.html
nginx.conf 配置文件分为三大块:
①、全局块:主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。下面的红色部分为全局块
②、Events块:events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。下面的绿色部分为Events块
③、Http块:Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。Http部分又包含:http全局部分、一个或以上server 部分。下面的蓝色部分为Http块
#user nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; #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 logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }
3.全局块(设置的指令将影响其他所有设置)
①、#user nobody;
nobody 是系统用户,是一个不能登陆的帐号,一个特殊用途的用户 ID ,一些服务进程如apache,aquid等都采用一些特殊的帐号来运行,比如nobody,news,games等等。一般来说 uid < 500 的都是系统 ID 。如不指定nginx默认用户是nobody. 这里用户的设置又有什么意义呢?主要是指定执行nginx的worker process的用户,linux里所有程序都是文件,都具有权限问题,这个指定的用户对特定的文件有没有权限访问或执行,就是这个用户的意义。
出现访问权限的时候,我们不能直接把user改为root,这样就可以把每个服务运行的情况隔离出来,保证不会因为服务器程序的问题而让服务器程序成了黑客的直接操作源。
指令格式:user user [group];
user:指定可以运行Nginx服务器的用户;group:可选项,可以运行Nginx服务器的用户组。
如果user指令不配置或者配置为user nobody nobody,默认由nobody账户运行。
②、worker_processes 1;
Nginx开启的进程数,worker_processes默认情况下为1,一般情况下不用修改,但考虑到实际情况,可以修改这个数值,以提高性能;也可以修改为worker_processes auto;自动的设置进程个数。
官方的建议是修改成CPU的内核数,这里引用一段翻译过的文章:
worker_processes指明了nginx要开启的进程数,
据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。
指令格式:worker_processes number | auto;
number : Nginx 进程最多可以产生的worker process 数。
auto : Nginx 进程将自动检测
③、#error_log logs/error.log;
error_log是关键字不能改变
logs/error.log是存放日志的目录,可以指定任意目录
在后面还可以添加日志级别,例如 error_log logs/error.log info;常见的错误日志级别有[debug | info | notice | warn | error | crit | alert | emerg],级别越高记录的信息越少。生产场景一般是 warn | error | crit 这三个级别之一,不要配置info等级较低的级别,会带来大量的磁盘I/O消耗。
指定格式:error_log file | stderr;
file : 日志输出到某个文件file
stderr : 日志输出到标准错误输出 (日志输出级别)
④、#pid logs/nginx.pid;
Nginx进程是作为系统守护进程在进行,需要在某个文件中保存当前运行程序的主进程号,Nginx支持该保存文件路径的定义。
指令格式:pid file;
file:指定存放路径和文件名称。
如果不指定,则默认置于路径 logs/nginx.pid
4.Events块(设定Nginx的工作模式及连接数上限)
①、worker_connections 1024;
用于定义Nginx每个进程的最大连接数,默认是1024。
指令格式:worker_connections number;
number : 工作进程可以打开的最大同时连接数
②、#use [ kqueue | epoll | /dev/poll | select | poll ];
指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll 。其中select 和poll 都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
指令格式:use method;
method : 要使用的连接处理方式,例如kqueue、epoll、select、poll、/dev/poll,通常无需显式指定它,因为默认情况下nginx将使用最有效的方法
5.Http块 - 全局
①、定义MIMI-Type
include mime.types;
default_type application/octet-stream;
指令格式:include file;
该指令主要用于将其他的Nginx配置或第三方模块的配置引用到当前的主配文件中,减少主配置文件的复杂度。default_type application/octet-stream;
default_type
属于HTTP核心模块指令,这里设定默认类型为二进制流。也就是当文件类型未定义时使用这种方式,
②、自定义服务日志
#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 logs/access.log main;
用于指定Nginx日志的输出日志,后面章节有更详细的讲解
③、允许sendfile方式传输文件
sendfile on;
#tcp_nopush on;
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
#tcp_nopush on;此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
④、连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接,单位是秒。
若将它设置为 0,就禁止了 keepalive 连接。
⑤、gzip压缩
#gzip on;
开启nginx gzip压缩后,网页、css、js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验。
6.Http块 - Server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。后面会详细介绍虚拟主机的概念。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
关于Server这一块后面还有详细介绍,这里只是简单说明。
- 全局块
①、listen 80;
声明服务器监听的端口号
②、server_name localhost;
用来指定IP地址或者域名,多个域名之间用空格分开
③、#charset koi8-r;
用于设置网页的默认编码格式
④、#access_log logs/host.access.log main;
定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式,在前面已经定义了。
- Location块
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
①、location / {}
该指令用于匹配 URL。Location接受两个参数,一个字符串或者正则和一段代码。字符串或者正则用于匹配某个特定目录
②、proxy_pass
设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。
③、index
设置网站的默认首页。
Nginx知多少系列之(三)配置文件详解的更多相关文章
- 【Hibernate】Hibernate系列3之配置文件详解
配置文件详解 3.1.配置文件 连接池性能优化:http://www.cnblogs.com/xdp-gacl/p/4002804.html
- Nginx安装,目录结构与配置文件详解
1.Nginx简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设 ...
- Cobaltstrike系列教程(三)-beacon详解
0x000--前文 Cobaltstrike系列教程(一)-简介与安装 Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel 0x001-Beacon详解 1 ...
- 【Hibernate】Hibernate系列4之配置文件详解
映射文件详解 4.1.概述 4.2.主键生成策略 4.3.属性配置 准确映射: 4.4.映射组成关系 4.5.单向多对一映射 4.6.双向多对一关系 4.7.一对一关联关系-基于外键映射 一对一联合m ...
- SpringBoot 使用(三): 配置文件详解
代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如S ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Nginx知多少系列之(六)Linux下.NET Core项目负载均衡
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略详解 8.Linux下.NET C ...
- Nginx知多少系列之(七)负载均衡策略
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
随机推荐
- openwrt MT7620A MT7610E 5G 驱动添加移值
使用 github 上别人提供好的源码.整合到最新的 openwrt 18 中,目前 kernel 的版本为 4.1 . 编辑中....
- MySQL/InnoDB中的事务隔离级别
SQL标准中的事务四种隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitted ...
- vue+django+webpack搭建
一.前言 最近接手了一个项目,后端是django,前端是django自带的模板,用的是jinja2,写了一段时间发现用起来特别不顺手,于是想在保持现有的模板基础上,引入vue框架,这样同事可以继续用自 ...
- Java多线程并发03——在Java中线程是如何调度的
在前两篇文章中,我们已经了解了关于线程的创建与常用方法等相关知识.接下来就来了解下,当你运行线程时,线程是如何调度的.关注我的公众号「Java面典」了解更多 Java 相关知识点. 多任务系统往往需要 ...
- 2016 Multi-University Training Contest 1 T3
题目要求出所有合法点对间的最短路径的平均值,因此我们应当求出所有合法最短点对的最 短路径之和,再除以合法点对个数. 题目中Guard之间有着很不自然的制约关系,每个Guard的周围和同行.列都不能有其 ...
- java虚拟机学习记录(内存划分、垃圾回收、类加载等机制)
一直以来觉得虚拟机是Java最难的一部分,涉及最底层的原理,学起来难度很大,而且工作中基本上用不到这些原理,所以对这部分“敬而远之”.现如今工作五年了,从Java基础到算法.数据结构.网络.数据库.设 ...
- JSFinder:一个在js文件中提取URL和子域名的脚本
JSFinder介绍 JSFinder是一款用作快速在网站的js文件中提取URL,子域名的脚本工具. 支持用法 简单爬取 深度爬取 批量指定URL/指定JS 其他参数 以往我们子域名多数使用爆破或DN ...
- 启动/关闭oracle服务
写一个脚本就可以很方便的打开服务和关闭服务,但是记住要以管理员的身份运行哦! 首先建立两个文件:启动.txt 和关闭.txt [在下面代码里启动的服务名称可能版本不一样,有可能名字不一样,自己对照看看 ...
- Prism 源码解读3-Modules加载
介绍 在软件开发过程中,总想组件式的开发方式,各个组件之间最好互不影响,独立测试.Prism的Modules很好的满足了这一点. 这个架构图很好了讲解了Prism的Modules的概念 Prism支持 ...
- 写爬虫爬了3w条职位数据,看看当前招聘形势 | 开源
最近有不少程序员又开始找工作了,为了了解目前技术类各职位的数量.薪资.招聘公司.岗位职责及要求,我爬取了拉勾网北上广深4个城市的招聘数据,共3w条.职位包括:人工智能(AI).大数据.数据分析.后端( ...