目录
1.前言
2.安装
3.配置文件详解
4.工做原理
5.Linux下托管.NET Core项目
6.Linux下.NET Core项目负载均衡
7.Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
8.Linux下.NET Core项目Nginx+Keepalived高可用(双主模式)
9.Linux下.NET Core项目LVS+Keepalived+Nginx高可用集群
10.构建静态服务器
11.日志分析
12.优化策略
13.总结
Nginx拥有大量官方发布的模块和第三方模块,这些已有的模块能够帮助咱们实现Web服务器上不少的功能。使用这些模块时,仅仅须要增长、修改一些配置项便可。php
Nginx运行目录为/usr/local/nginx,其目录结构以下:css
|---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目录下的临时文件。html
②、conf:这是Nginx全部配置文件的目录,极其重要linux
fastcgi.conf:fastcgi相关参数的配置文件nginx
fastcgi.conf.default:fastcgi.conf的原始备份apache
fastcgi_params:fastcgi的参数文件,nginx配置Fastcgi解析时会调用fastcgi_params配置文件来传递服务器变量,这样CGI中能够获取到这些变量的值。windows
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配置文件
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 1024; } 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; # } #} }
①、#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
①、worker_connections 1024;
用于定义Nginx每一个进程的最大链接数,默认是1024。
②、#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工做模式是首选。
①、定义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等静态资源的大小会大大的减小,从而能够节约大量的带宽,提升传输效率,给用户快的体验。
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是彻底同样的,该技术的产生是为了节省互联网服务器硬件成本。后面会详细介绍虚拟主机的概念。
每一个 http 块能够包括多个 server 块,而每一个 server 块就至关于一个虚拟主机。
而每一个 server 块也分为全局 server 块,以及能够同时包含多个 locaton 块。
关于Server这一块后面还有详细介绍,这里只是简单说明。
①、listen 80;
声明服务器监听的端口号
②、server_name localhost;
用来指定IP地址或者域名,多个域名之间用空格分开
③、#charset koi8-r;
用于设置网页的默认编码格式
④、#access_log logs/host.access.log main;
定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式,在前面已经定义了。
这块的主要做用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也能够是IP别名)以外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
①、location / {}
该指令用于匹配 URL。Location接受两个参数,一个字符串或者正则和一段代码。字符串或者正则用于匹配某个特定目录
②、proxy_pass
设置被代理服务器的地址。能够是主机名称、IP地址加端口号的形式。
③、index
设置网站的默认首页。