Nginx基础

conf:

main {                                          #全局设置
Events{}
HTTP{
server{ #主机设置
location{} #URL匹配特定位置的设置
location{}
……
}
server{
}
……
    }
      }

main部分设置的指令将影响其他所有的设置;
server部分的指令主要用于指定主机和端口
upstream部分主要用于负载均衡,设置一系列的后端服务器
location部分用于匹配网页位置。

微笑四者关系:
server继承main;location继承server;upstream不会继承其他设置也不会被继承。

一、Nginx全局属性的配置


user nobody nobody;
指定Nginx Worker进程运行用户以及用户组,默认为nobody
worker_processes 4;
主模块指令,指定了Nginx要开启的进程数,每个进程大约消耗10M~12M,建议与CPU核数一致即可;
error_log logs/error.log notice;
定义全局错误日志,日志输出级别为debug,info,notice,warn,error,crit可供选择
pid       logs/nginx.pid
用来指定进程id的存储文件位置
worker_rlimit_nofile 65535;
用于指定一个nginx进程可以打开的最多文件描述符数目,需要使用命令"ulimit -n 65535"来设置
events {
events用来设定Nginx的工作模式及连接上
     use epoll;
use用来指定nginx工作模式。Nginx支持的工作模式有select,poll,kqueue,epoll,rtsig和/dev/poll。其中select和poll是标准工作模式,kqueue和epoll是高效工作模式,不同的是epoll主要用于Linux系统,而kqueue主要用于BSD系统中。对于Linux系统,epoll是首选。
                                                                 worker_connections 65536; 
用于定义Nginx每个进程的最大连接数,默认是1024.
}

因此Nginx的最大客户端连接数 max_client = worker_processes * worker_connections

二、HTTP服务器的配置

http{
include conf/mime.types;
defaul_type     application/octet-stream;  #default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx不予以解析,用浏览器访问PHP文件时就会出现下载窗口。
log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
client_max_body_size 200m;  #用来设置允许客户端请求的单个文件最大的字节数
client_header_buffer_size 32k;  #用来指定来自客户端请求头的headerbuffer大小,对于大多数请求,1KB的缓冲区大小已经足够了,如果自定义了消息头或有更大的cookie也可以增加缓冲区的大小;
large_client_header_buffers 4 32k;  #用来指定客户端请求中较大的信息头的缓存的最大数量和大小,4为个数。128为大小,最大缓存为128KB
sendfile on;  #参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on,用于防止网络阻塞。
tcp_nopush           on;  
tcp_nodelay         on;
keepalive_timeout   65;  #用于设置客户端连接保持活动的超时时间,超过这个时间后服务器
user nobody nobody;
client_header_timeout 10;  #用于设置客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误
client_body_timeout 10;  #用于设置客户端主体读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out (408)”错误
send_timeout 10;  #用于指定客户端的超时时间,这个仅限于两个连接活动之间的时间,如果超过这个时间客户端没有任何活动,Nginx将会关闭连接
}

扩展:想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:

参数说明示例
$remote_addr
客户端地址
211.28.65.253
$remote_user
客户端用户名称
--
$time_local
访问时间和时区
18/Jul/2012:17:00:01 +0800
$request
请求的URI和HTTP协议
"GET /article-10000.html HTTP/1.1"
$http_host
请求地址,即浏览器中你输入的地址(IP或域名)
www.it300.com  192.168.100.100
$status
HTTP请求状态
200
$upstream_status
upstream状态
200
$body_bytes_sent
发送给客户端文件内容大小
1547
$http_referer
url跳转来源
https://www.baidu.com/
$http_user_agent
用户终端浏览器等信息
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol
SSL协议版本
TLSv1
$ssl_cipher
交换数据中的算法
RC4-SHA
$upstream_addr
后台upstream的地址,即真正提供服务的主机地址
10.10.10.100:80
$request_time
整个请求的总时间
0.205
$upstream_response_time
请求过程中,upstream响应时间
0.002





















三、HttpGzip模块配置(支持在线实时压缩输出数据流)

gzip on;
#开启gzip压缩,实时压缩输出数据流
gzip_min_length 1k;
#用于设置允许压缩的页面最小字节数,页面字节数从header头的Content_Length中获取。默认值为0,不管页面多大都进行压缩,建议设置成大于1k字节数,小于1k可能会越压越大。
gzip_buffers 416k;
#表示申请4个单位为16k的内存作为压缩结果流缓存。
gzip_http_version 1.1;
#用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,使用默认即可。
gzip_comp_level 2;
#用来指定压缩比,1压缩比最小但处理速度最快;9压缩比最大,传输速度快,但是处理最慢,耗费CPU资源
gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

gzip_vary on;
#该选项可以让前端的缓存服务器缓存经过gzip压缩的页面。














四、负载均衡配置

Nginx的负载均衡模块中常用的几种调度算法:
1.轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器死机,故障系统将被自动踢除,使用户访问不受限制。

upstream backserver { 
server 192.168.1.14; 
server 192.168.1.15; 
}

2.weight

指定轮询权值,Weight值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况。

upstream backserver { 
server 192.168.1.14 weight=1; 
server 192.168.1.15 weight=2; 
}

3.ip_hash

每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享的问题。

upstream backserver { 
ip_hash; 
server 192.168.0.14; 
server 192.168.0.15; 
}

4.重试策略

可以为每个 backserver 指定最大的重试次数,和重试时间间隔,所使用的关键字是 max_fails 和 fail_timeout。

upstream backserver { 
server 192.168.1.14  weight=1  max_fails=2 fail_timeout=30s; 
server 192.168.1.15  weight=2  max_fails=2 fail_timeout=30s;
}

5.热机策略

当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就会使用由 backup 标注的备机。必须要注意的是,backup 不能和 ip_hash 关键字一起使用。

upstream backserver { 
server 192.168.1.14  weight=1  max_fails=2 fail_timeout=30s; 
server 192.168.1.15  weight=2  max_fails=2 fail_timeout=30s;
server 192.168.1.16 backup;
}

扩展:

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态,常用状态有:

down:表示当前的服务器暂时不接受负载均衡
backup:预留的备份机器,当其他所有的非backup机器出现故障或忙的时候才会请求backup机器,因此这台服务器压力最轻
max_fails:允许请求失败的次数,默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
fail_timeout:在经历了max_fails次失败后,暂停服务时间。

例如:

upstream ixdba.net {
ip_hash;
server 192.168.12.133:80;
server 192.168.12.134:80 down;
server 192.168.12.135:8009 max_fails=3 fail_timeout=20s;
server 192.168.12.136:8080;
}
其中,ixdba.net为负载均衡器的名称,该名称可以任意指定,在后面需要的地方直接调用。

五、server虚拟主机配置

server {
listen 80;
server_name 192.168.12.188 www.ixdba.net;
index  index.html index.htm index.jsp;
root    /var/www/html/www.ixdba.net;
charset gb2312;
access_log   /var/log/nginx/tc/access_tc.log  main;
error_log    /var/log/nginx/tc/error_tc.log   notice;
}

六、URL匹配配置

1.可以通过location指令实现Nginx对动,静态网页的过滤处理。如下设置通过locaiton指令对URL进行分析处理,所有扩展名为.gif、.jpg .jpeg .png .bmp .swf的静态文件都交给nginx来处理,并指定过期时间为30天。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /var/www/html/www.ixdba.net;
expires 30d;
}

2.将根目录下的upload和html下的所有文件都交给nginx处理
location ~ ^/(upload|html)/ {
root /var/www/html/www.ixdba.net;
expires 30d;
}

3.对此虚拟主机下的动态网页的过滤处理,也就是将所有的以.jsp为后缀的文件都交给本机的8080端口处理
location ~ ^/(upload|html)/ {
root /var/www/html/www.ixdba.net;
expires 30d;
}

七、虚拟主机配置实例

http{
server {
listen 80;
server_name www.domain1.com;
access_log  xxxx main;
location / {
index index.html;
root /var/www/html/www.domain1.com;
}
}

server {
listen 80;
server_name www.domain2.com;
access_log  xxxx main;
location / {
index index.html;
root /var/www/html/www.domain2.com;
}
include /etc/nginx/conf.d/www.domain3.com.conf;
}
}

八、负载均衡配置实例

http {
upstream myserver {
server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
server  192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
server  192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
}
server {
listen 80;
server_name www.domain.com 192.168.12.189;
index index.htm index.html;
root /var/www/html/www.domain.com;
location / {
proxy_pass http://myserver;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
include /etc/nginx/conf.d/proxy.conf;
}
}
}

九、Nginx + FastCGI

spawn-fcgi和PHP-FPM是支持PHP的两个FastCGI进程管理器
server{
……
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;   #ip socket
(fastcgi_pass  unix:/tmp/php-fpm.sock;)#Unix socket 根据经验IP socket在高并发访问下比Unix Socket稳定,但UnixSocket速度要比IP socket快
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;     #该指令放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径。
include fastcgi_params;
}
}
优化Nginx中FastCGI参数的实例
fastcgi_cache_path /etc/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastvgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid and 1m;

十、搭建Nginx + Java环境

两种耦合方式:
1.将静态页面交给Nginx,动态请求交给后端Tomcat处理
2.将所有请求都交给后端的tomcat去处理,同时利用Nginx自身的负载均衡功能进行多台Tomcat服务器的负载均衡
1> . 动态页面与静态页面的分离
IP_tomcat => 192.168.12.130:8080
server {
listen 80;
server_name www.domain.com;
root /var/www/html;
location /img/ {
alias /var/www/html/img/;
}
location ~ (\.jsp)|(\.do)$ {
proxy_pass http://192.168.12.130:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

2>多个Tomcat负载均衡的实例
upstream mytomcats {
server 192.168.12.131:8080;
server 192.168.12.132:8080;
server 192.168.12.133:8080;
}
server {
listen 80;
server_name www.domain.com;
    location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
root /var/www/html/;
}
location / {
proxy_pass http://mytomcats;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值