nginx安装是的configure语句:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
1、总体介绍
Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
server { //这个是服务器级别
listen 80;
server_name localhost;
location / { //这个是请求级别
root html;
index index.html index.htm;
}
}
}
2、已配nginx文件介绍
/*运行用户*/
user nginx;
/*启动进程,通常设置成和cpu的数量相等*/
worker_processes auto;
/*进程最大打开文件数*/
worker_rlimit_nofile 204800;
/*全局错误日志 crit最低级别*/
error_log /var/log/nginx/error.log crit;
/*PID文件,记录当前启动的nginx的进程ID*/
pid /var/run/nginx/nginx.pid ;
/*工作模式*/
events {
/*使用epoll模型*/
use epoll;
/*如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。 */
multi_accept on;
/*并发总数是 worker_processes 和 worker_connections 的乘积*/
worker_connections 1024;
}
/*设定http服务器,利用它的反向代理功能提供负载均衡支持*/
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 /var/log/nginx/access.log main;
/*hash表可保存服务器名字的数量(32的倍数)*/
server_names_hash_bucket_size 128;
/*用于设置客户端请求的Header头缓冲区的大小,一般1kb就够用*/
client_header_buffer_size 2k;
/*设置客户端请求的Header头缓冲区大小,默认为4K。客户端请求行不能超过设置的第一个数,请求的Header头信息不能大于设置的第二个数,否则会报"Request URI too large"(414)或“Bad request”(400)错误。如果客户端的Cookie信息较大,则需增加缓冲区大小*/
large_client_header_buffers 4 4k;
/*设置nginx允许接收的客户端请求内容的最大值,及客户端请求Header头信息中设置的Content-Lenth大最大值。如果超出该指令设置的最大值,nginx将返回“Request Entity Too Large”的错误信息(HTTP的413错误码)*/
client_max_body_size 8m;
/*这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后***缓存*/
open_file_cache max=204800 inactive=20s;
/*这个是指多长时间检查一次缓存的有效信息。*/
open_file_cache_min_uses 1;
/*open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。*/
open_file_cache_valid 30s;
/*默认情况下数据发送时,内核不会马上发送,会等待较多的字节组成一个数据包,这样能提供IO的发送效率,对于大量数据的传送石非常有益的。但是,如果每次只发送很少字节的程序中,等待时间就会长,由于我们的web服务器一次不会传输大量数据,故禁用内核这个等待功能,会提高nginx传送数据的效率。*/
tcp_nodelay on;
/*sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.。*/
sendfile on;
/*连接超时时间*/
keepalive_timeout 65;
/*文件扩展名与文件类型映射表*/
include /etc/nginx/mime.types;
/*默认文件类型,默认为text/plain*/
default_type application/octet-stream;
/*设定实际的服务器列表*/
upstream Server80{
server 10.10.6.247:8080;
}
/*HTTP服务器*/
server {
/*监听8082端口*/
listen 8082;
/*定义使用xxxx访问*/
server_name paas.ihuijian.com;
/* $remote_addr 与$x_forwarded_for 用以记录客户端的ip地址;*/
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /mnt/data/getfile {
/*这是每个请求能用磁盘上临时文件最大大小。这些当上游响应太大不能装配到缓冲区时被创建。*/
proxy_max_temp_file_size 0;
/*指定每秒该连接能下载的bytes,主要用来限制个别请求的带宽*/
limit_rate 200k;
if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|mp4)$){
add_header Content-Disposition: 'attachment;';
}
alias /mnt/data/;
}
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name localhost;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /downloads {
root html;
index index.html index.htm;
}
location / {
proxy_pass http://Server80;
}
location /RecordServer/10.10.26.191/ {
if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|mp4)$){
add_header Content-Disposition: 'attachment;';
}
proxy_pass http://10.10.26.191/RecordServer/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3、细节解读
3.1、location区段
通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=|~|~*|^~|@] pattern{……}
查找顺序和优先级
1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配
3.2、root 、alias指令区别
location /img/ {
alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~