目录
nginx编译选项
nginx默认配置
Nginx主模块
Nginx事件模块 event
http核心模块
Httpfcgi模块
HttpGzip模块
Http代理
nginx编译选项 ./configure --sbin-path=/usr/local/nginx/nginx
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:
--prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。
--sbin-path=path 设置nginx的可执行文件的路径,默认为 ``prefix/sbin/nginx.
--conf-path=path 设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为``prefix/conf/nginx.conf.
--pid-path=path 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为``prefix/logs/nginx.pid.
--error-log-path=path 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为``prefix/logs/error.log.
--http-log-path=path 设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为``prefix/logs/access.log.
--user=name 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。
--group=name 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。
--with-select_module``--without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
--with-poll_module``--without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
--without-http_gzip_module — 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
--without-http_rewrite_module 不编译重写模块。编译并运行此模块需要PCRE库支持。
--without-http_proxy_module — 不编译http_proxy模块。
--with-http_ssl_module — 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
--with-pcre=path — 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
--with-pcre-jit —编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
--with-zlib=path —设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
--with-cc-opt=parameters — 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件数量:--with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=parameters —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".
#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;
# }
#}
}
#Nginx主模块
#daemon daemon
#debug_points debug_points
#error_log error_log
#include include
#lock_file lock_file
#master_process master_process
#pid pid
#ssl_engine ssl_engine
#timer_resolution timer_resolution
#user user group
#worker_cpu_affinity worker_cpu_affinity
#worker_priority worker_priority
#worker_processes worker_processes
#worker_rlimit_core worker_rlimit_core
#worker_rlimit_nofile worker_rlimit_nofile
#worker_rlimit_sigpending worker_rlimit_sigpending
#working_directory working_directory
#daemon on | off
#默认 on 守护进程 生产环境中不要使用"daemon"和"master_process"指令,这些选项仅用于开发调试。
#debug_points [stop | abort]
#应该适用于调试,在调试器内设置断点之类的。
#error_log file [ debug | info | notice | warn | error | crit ]
#缺省值:${prefix}/logs/error.log
#Nginx 添加 --with-debug 编译参数, 你还能够使用以下配置:
#error_log LOGFILE [ debug_core | debug_alloc | debug_mutex | debug_event]: | debug_http | debug_imap ;
#include file
#可以在任意地方使用include指令实现配置文件的包含,类似于apache中的include方法,可减少主配置文件d。
#include 指令还支持像下面配置一样的全局包含的方法,例如包含一个目录下所有以".conf"结尾的文件:
#include vhosts/*.conf;
#注意路径受到configure编译参数--prefix=<路径>指令的影响,如果没有指定,Nginx默认是被编译在/usr/local/nginx。
#lock_file file
#nginx使用accept互斥体序列化accept()系统调用。如果nginx是由gcc、Intel c++或SunPro c++编译器在i386、amd64、sparc64和ppc64上构建的,那么nginx使用原子指令来实现互斥。在其他情况下,将使用锁文件。
#master_process on | off
#默认 on 生产环境中不要使用"daemon"和"master_process"指令,这些选项仅用于开发调试。
#pid /var/log/nginx.pid
#进程id存储文件。可以使用 kill -HUP cat /var/log/nginx.pid\ 对Nginx进行配置文件重新加载。
#ssl_engine engine
#该指令用于指定openssl使用的引擎。你可以通过下面的命令行获知系统目前支持的openssl引擎 openssl engine -t
#timer_resolution 100ms
#该指令允许减少gettimeofday()系统调用的数量。默认情况下,在每次从kevent()、epoll、/dev/poll、select()、poll()返回之后调用gettimeofday()。
#但是,如果在记录$upstream_response_time或$msec变量时需要日志中的确切时间,那么应该使用timer_resolution
#减低时间解析度,减少系统调用.生产力强的应该大量运行在用户空间,计时器解析度:降低此值,可减少gettimeofday()系统调用的次数;
#user user [group]
#指定Nginx Worker进程运行用户,默认是nobody帐号。 user nobody nobody;
#worker_cpu_affinity
#worker_cpu_affinity cpumask [cpumask...]
#仅适用于linux,使用该选项可以绑定worker进程和CPU.
#worker_proceses 4;
#worker_cpu_affinity 0001 0010 0100 1000;
#分别给每个worker进程绑定一个CPU.
#worker_proceses 2;
#worker_cpu_affinity 0101 1010;
#将CPU0/CPU2绑定给第一个worker进程,将CPU1/CPU3绑定给第二个worker进程。
#nginx默认是没有开启利用多核cpu的配置的。需要通过增加worker_cpu_affinity配置参数来充分利用多核cpu,cpu是任务处理,当计算最费时的资源的时候,cpu核使用上的越多,性能就越好。01表示启用第一个CPU内核,10表示启用第二个CPU内核
#worker_priority
#worker_priority [-] number
#worker_priority -10;
#指明worker进程的nice值,调低worker线程的nice值,提高优先级。使用该选项可以给所有的worker进程分配优先值。
#worker_processes 1 | number
#nginx可以使用多个worker进程
#max_clients = worker_processes * worker_connections
#worker_rlimit_core max | size
#worker_rlimit_core 50M;
#working_directory /tmp/;
#设置每个worker最大能打开的核心文件数,用于突破上限而不用重启master进程。core文件中Nginx发生crash的时候会产生的文件。一般用于调试,gdb等。
#worker_rlimit_nofile number
#设置每个worker最大能打开的核件数,用于突破上限而不用重启master进程。
#这个值未设置的话,采用系统的值,ulimit -a,一般会把它调高点,以防报错 "too many open files" 的问题。
#worker_rlimit_sigpending limit
#定义每个用户(调用进程的用户ID)能够被排入队列的信号(signals)数量。如果队列(queue)满了,但由于这个限制,信号(signals)会被忽略。
#working_directory directory
#该指令用于设定worker进程工作的目录,仅用于定义核心(core)文件的位置。对于该目录,worker进程用户(user指令指定的用户)必须有写的权限,用于能够写入核心(core文件),一般会配套的有 worker_rlimit_core 指令设置。
#Nginx事件模块 events
#accept_mutex
#accept_mutex_delay
#debug_connection
#devpoll_changes
#devpoll_events
#kqueue_events
#epoll_events
#multi_accept
#rtsig_signo
#rtsig_overflow_events
#rtsig_overflow_test
#rtsig_overflow_threshold
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
#worker_connections
#accept_mutex [ on | off ]
#nginx 使用连接互斥锁进行顺序的accept()系统调用.设置网路连接序列化,防止惊群现象发生
#惊群就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。只有一个进程获得了该事件并进行处理,其他继续等待,降低了系统性能。
#accept_mutex_delay 500ms;
#如果一个进程没有互斥锁,它将延迟至少多长时间。默认情况下,延迟是500ms
#debug_connection [none | ip | CIDR]
#debug_connection 192.168.1.1/127.0.0.1/::1/localhost;
#允许指定的客户端IP调试日志,其他IP使用 error_log 指令设置的级别来输出日志。调试日志IP使用IPV4或网段,也可以指定主机名,unix socket等。
#要正常使用该功能,必须在编译时使用 --with-debug 参数。
#devpoll_changes
#devpoll_events
#kqueue_events
#epoll_events
#这些参数指定了按照规定方式传递到或者来自内核的事件数,默认devpoll的值为32,其余为512。
#用于设置在/dev/poll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。
#devpoll_changes和devpoll_events指令
#前者设置传递给内核的事件数量,后者设置从内核获取的事件数量。默认值为32
#kqueue_changes和kquue_events指令
#用于设置在kqueue事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。前者设置传递给内核的事件数量,后者设置从内核获取的事件数量。默认值为512.
#epoll_events指令
#用于设置在epoll事件驱动模型下Nginx服务器可以与内核之间传递事件的数量。默认值为512.
#注意:与其他事件驱动模型不同,epoll模型下Nginx服务器向内核传递事件的数量和从内核获取的事件数量是相等的。所以,不存在epoll_changes指令。
#multi_accept [ off | on ]
#用于配置Nginx服务器是否尽可能多的接收客户端的网络连接请求。默认值为off.
#rtsig_signo
#rtsig模式启用后使用两个信号,用于设置rtsig模式使用的2个信号中的第一个,第二个信号是在第一个信号的编号上加1.默认的第一个信号设置为:SIGRTMIN+10 (40)
#rtsig_overflow_events
#rtsig_overflow_test
#rtsig_overflow_threshold
#这些指令指定如何处理rtsig队列溢出。当发生溢出时,nginx刷新rtsig队列,然后处理poll()和rtsig之间的事件切换。poll()连续处理所有未处理的事件,而rtsig会定期清空队列以防止新的溢出。当溢出被完全处理后,nginx再次切换到rtsig方法。
#rtsig_overflow_events 指定了poll监听数量,默认是16
#rtsig_overflow_test 指定了poll处理多少数量的事件后, rtsig去减少队列元素,默认为32
#rtsig_overflow_threshold 此选项只在linux 2.4有效,该选项指定队列被填满几分之几时再减少队列元素,默认为1/10
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
#如果在./configure的时候指定了不止一种事件模型,那么可以设置其中一个,以便告诉nginx使用哪种事件模型。
#默认情况下nginx会在./configure时找出最适合系统的事件模型。
#select,标准方法,各平台默认自动编译支持,如果没有更有效的方法是,使用该方法。--with-select_module 和 --without-select_module 这2个编译参数可以强制设定是否使用 select 或不使用 select.
#poll ,标准方法,各平台默认自动编译支持,如果没有更有效的方法是,使用该方法。--with-poll_module 和 --without-poll_module 这2个编译参数可以强制设定是否使用 select 或不使用 select.
#kqueue ,在FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, 和 macOS 等系统上更高效的方法。
#epoll ,在Linux 2.6+ 上更高效的方法。
#/dev/poll , Solaris 7 11/99+, HP/UX 11.22+ , IRIX 6.5.15+, 和 Tru64 UNIX 5.1A+ 系统上更高效的方法。
#eventport ,Solaris 10 系统上更高效的方法。
#worker_connections
#每个进程的最大连接数
#这个数值不能大于单个worker进程能打开的最大文件数限制(这个值可由 worker_rlimit_nofile 指令设置)
#max_clients = worker_processes * worker_connections
#作为反向代理 max_clients = worker_processes * worker_connections/4
#http核心模块
#alias
#client_body_in_file_only
#client_body_in_single_buffer
#client_body_buffer_size
#client_body_temp_path
#client_body_timeout
#client_header_buffer_size
#client_header_timeout 60
#client_max_body_size
#default_type
#directio
#error_page
#if_modified_since
#index
#internal
#keepalive_timeout
#keepalive_requests
#large_client_header_buffers
#limit_except
#limit_rate
#limit_rate_after
#listen
#location
#log_not_found
#log_subrequest
#root
#msie_padding
#msie_refresh
#open_file_cache off
#open_file_cache_errors off
#open_file_cache_min_uses 1
#open_file_cache_valid 60
#optimize_server_names on
#port_in_redirect on
#recursive_error_pages off
#resolver address
#resolver_timeout 30
#satisfy_any off
#send_timeout 60
#sendfile off
#server {...}
#server_name
#server_name_in_redirect on
#server_names_hash_max_size
#server_names_hash_max_size
#server_tokens
#tcp_nodelay
#tcp_nopush
#try_files
#types
#alias file-path|directory-path
#该指令用于在URL和文件系统路径之间实现映射.它与root指令类似,但是网页文件的root根目录不会改变,
#改变的只是请求URL的文件系统路径.
#client_body_in_file_only off|on
#该指令允许将客户端请求体存储在文件中。
#如果指令被启用,请求完成时的文件将不会被删除。
#这个指令可以用于调试,也可以用于嵌入式Perl模块中的$r->request_body_file方法。
#client_body_in_single_buffer
#该指令指定是否保持整个内容在一个单一的客户端请求缓冲区中,
#该指令在使用变量$request_body时被推荐使用.
#client_body_buffer_size 8k/16k
#该指令指定客户端请求内容的缓冲区大小.如果客户端请求内容大于缓冲区,
#整个请求内容或部分请求内容将被写人临时文件.缓冲区默认大小相当于网页大小的两倍,为8k 或16k.
#client_body_temp_path dir-path [ level1 [ level2 [ level3 ]
#该指令用于指定存放请求内容临时文件的目录.缓存目录最多支持3层子目录.
#client_body_temp_path /var/nginx/client_temp 1 2;
#/var/nginx/client_temp/2/34/32434324
#client_body_timeout 60
#该指令用于设置读取客户端请求内容的超时时间.如果超过该指令设置的时间,
#Nginx将返回"Request time out"错误信息(HTTP状态码为408)
#client_header_buffer_size 1k
#该指令用于设置客户端请求的Header头缓冲区大小.对绝大多数请求来说,
#1KB大小的Header头缓冲区已经足够,但是对于Cookie内容较大的请求来说,可能不够用.
#client_header_timeout 60
#该指令用于设置读取客户端请求Header头信息的超时时间,如果超过该指令设置的时间,
#Nginx将返回"Request time out "错误信息(HTTP状态码为408)
#client_max_body_size 1m
#该指令用于设置允许接受的客户端请求内容的最大值,即客户端请求Header头信息中
#设置的Content-Length的最大值.如果超过该指令设置的最大值.
#Nginx将返回"Request Entity Too Large"错误信息(HTTP状态码为413).
#当默认值为1MB时,如果Nginx服务器提供上传1MB以上的大文件等操作,则要加大该值.
#default_type MIME-type
#default_type text/plain
#MIME-type是用来告诉浏览器请求的文件媒体类型,
#例如:MIME-type名text/plain表示该文件为文本文件,
#text/html表示该文件为HTML网页文件.
#如果Nginx无法识别该文件属于何种MIME-type类型,则该文件标记为default_type指令设置的MIME-type
#directio [size|off]
#The directive enables use of flags O_DIRECT (FreeBSD, Linux), F_NOCACHE (Mac OS X) or directio() function (Solaris) for reading files with size greater than specified. This directive disables use of sendfile for this request. This directive may be useful for big files:directio 4m;
#error_page
#error_page 502 503 504 /50x.html;
#该指令用于设置如果出现指定的HTTP错误状态码,则返回给客户端显示的对应的URI地址.
#if_modified_since [off|exact|before]
#如何比较文件修改的时间和请求头“If-Modified-Since”中的时间
#off 不要检查“If-Modified-Since”请求头
#exact 精确匹配 default
#before 文件修改时间应该小于“If-Modified-Since”请求头中的时间
#index
#该指令用于设置Nginx的默认首页文件.
#index index.php index.html
#internal
#该指令用于设置某个location路径只能在Nginx内部使用,外部无法访问.
#location /404.html {
# internal;
#}
#keepalive_timeout 75
#长连接timeout
#keepalive_requests 100
#设置一个keep-alive连接使用的次数.一次请求结束后,
#如果该连接使用的次数没有超过keepalive_requests指令设置的请求次数,
#则服务器并不立即主动断开连接,而是直到达到keepalive_timeout指令设置的时间,才关闭连接.
#large_client_header_buffers 4 4k/8k
#该指令用于设置客户端请求的Header头缓冲区大小,默认值为4KB.客户端请求行不能超过
#large_client_header_buffers指令设置的值.客户端请求的Header头信息不能大于
#large_client_header_buffers指令设置的缓冲区大小,否则会报414或400错误,如果客户端的Cookie信息较大,则须增加缓冲区大小.
#limit_except
#该指令用于限制HTTP方法访问location中的内容
#limit_except GET {
# allow 192.168.1.0/32;
# deny all;
#}
#limit_rate
#limit_rate 100k;
#该指令主要用来限速,限速单位是"字节数/秒",一般在提供HTTP下载等应用中会用到该指令.限速只对一个连接起效,如果客户端开启两个连接下载,下载的速度将是限速值的两倍
#limit_rate_after
#limit_rate_after 1m;
#该指令可以设置一个字节数(1MB),下载的字节数大于该值后,limit_rate指令的限速功能将起效.对于MP3在线播放,HTTP方式的Flash FLV视频点播等应用,使用该指令将会起到不错的效果.
#listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] ]
#listen 127.0.0.1:8000;
#该指令用于设置虚拟主机监听的服务器地址和端口号,你可以同时设置服务器地址和端口号,也可以指定一个IP地址,或者一个端口号,或者一个服务器名.如果listen指令只设置一个服务器名或IP地址,那么它的默认端口号为80.
#location [=|~|~|^~] /uri/ { ... }
#指令对不同的URI进行不同的配置,既可以使用字符串,也可以使用正则表达式,使用正则表达式,须使用以下前缀.
#~*,表示不区分大小写的匹配.
#~,表示区分大小写的匹配.
#log_not_found [off|on]
#该指令用来启用或禁用404错误日志,这个指令可以用来禁止Nginx记录找不到robots.txt和favicon.ico这类文件的错误信息.
#log_subrequest
#该指令用来启动或禁止access_log中记录类似rewrite rules , SSI request等子请求.
#root
#指定请求的文档根目录
#msie_padding IE
#msie_refresh IE
#open_file_cache off
#open_file_cache max=102400 inactive=20s
#open_file_cache 指令会对以下信息进行缓存:
#打开文件描述符的文件大小和修改时间信息
#存在的目录信息
#搜索文件的错误信息:文件不存在无权限读取等信息
#max指定缓存数量 inactive是指经过多长时间文件没被请求后删除缓存。
#open_file_cache_errors off
#open_file_cache_min_uses 1
#inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的
#open_file_cache_valid 60
#这个是指多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件,60s后会检查此文件的更改信息是否变化,发现变化就更新
#optimize_server_names on
#port_in_redirect on
#recursive_error_pages off
#resolver address
#resolver_timeout 30
#satisfy_any off
#send_timeout 60
#sendfile off
#sendfile on; #指定是否使用sendfile系统调用来传输文件。
#sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),
#从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝。
#开启高效文件传输,将tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞。
#server {...}
#server_name
#server_name_in_redirect on
#server_names_hash_max_size
#server_names_hash_max_size
#server_tokens
#tcp_nodelay
#tcp_nodelay on; #该指令允许或禁止使用套接字选项TCP_NODELAY。只包含在keep-alive
#tcp_nopush
#tcp_nopush on; #该指令允许或禁止在FreeBSD上使用套接字选项TCP_NOPUSH或在Linux上使用TCP_CORK。
#此选项仅在使用sendfile时可用。
#设置此选项会导致nginx试图在Linux和FreeBSD 4.xReadMoreAboutTcpNopush上将它的HTTP响应头发送到一个包中
#try_files
#try_files #这个指令告诉Nginx测试每个文件的存在性,
#并使用第一个找到的文件作为URI。如果没有找到任何文件,则调用位置回退(“回退”可以是任何名称)。
#回退是必需的参数。它可以是一个命名位置或任何保证URI。
#types
#types {
# text/html html;
# image/gif gif;
# image/jpeg jpg;
#}
#HTTP核心模块变量
#$arg_PARAMETER
#$args
#$binary_remote_addr
#$body_bytes_sent
#$content_length
#$content_type
#$cookie_COOKIE
#$document_root
#$document_uri
#$host
#$http_HEADER
#$is_args
#$limit_rate
#$query_string
#$remote_addr
#$remote_port
#$remote_user
#$request_filename
#$request_body
#$request_body_file
#$request_completion
#$request_method
#$request_uri
#$scheme
#$server_addr
#$server_name
#$server_port
#$server_protocol
#$uri
#$arg_PARAMETER
#该变量包含了当查询字符串时,GET请求可变参数的值
#arg_XXX 获取的查询字符串(GET参数),XXX为参数名称
#$args
#请求行中的参数
#$binary_remote_addr
#二进制格式的客户端地址
#$body_bytes_sent
#nginx返回给客户端的响应体的字节数(即不含响应头)
#$content_length
#客户端请求头中的content-length值
#$content_type
#客户端请求头中的content-type值
#$cookie_COOKIE
#客户端请求Header头中的cookie变量.前缀"$cookie_"加上cookie名称的变量,该变量的值即为cookie名称的值
#$document_root
#当前请求所属的root指令设置的文档根目录路径
#$document_uri
#请求的URI
#$host
# 请求的主机名
#$http_HEADER
#将HTTP头的值转换为小写,并将“破折号”转换为“下划线”,例如$http_user_agent, $http_referer…
#$is_args
#是否定义了参数,如果定义了args变量,是值为?,如果未定义,则为空
#$limit_rate
#这个变量允许限制连接速率
#$query_string
#查询字符串
#$remote_addr
#客户端的IP地址
#$remote_port
#客户端的端口
#$remote_user
#访问者认证信息
#$request_filename
#请求的文件的全文件名
#$request_body
#请求主体内容
#$request_body_file
#请求资源的文件路径
#$request_completion
#$request_method
#请求方式
#$request_uri
#请求uri
#$scheme
#所用的协议,http/https
#$server_addr
#服务器IP
#$server_name
#服务器名称(如域名)
#$server_port
#服务器服务端口
#$server_protocol
#协议及版本号
#$uri
#请求URI(除请求的域名外的部分,等同于$document_uri)
#fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
#缓存路径文件,目录结构等级,关键字区域实际和非活动时间
fastcgi_connect_timeout 300;
#连接到后端fastcgi超时时间
fastcgi_send_timeout 300;
#向fastcgi请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)
fastcgi_rend_timeout=300;
#接收fastcgi应答超时时间,同理也是2次握手后
fastcgi_buffer_size 128k;
#读取fastcgi应答第一部分response-header需要多大缓冲区,
#该值表示使用1个64kb的缓冲区读取应答第一部分(应答头),
#可以设置为fastcgi_buffers选项缓冲区大小
fastcgi_buffers 4 128k;
#指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,
#假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存;
#若页面大于256kb,那么大于的256kb的部分会缓存到fastcgi_temp指定路径中,这并非是个好办法,
#内存数据处理快于硬盘,一般该值应该为站点中php/java脚本所产生页面大小中间值,
#站点大部分脚本所产生的页面大小为256kb,那么可把值设置为16 16k,4 64k等
fastcgi_busy_buffers_size 256k;
#默认值是fastcgi_buffer的2倍
fastcgi_temp_file_write_size 256k;
#写入缓存文件使用多大的数据块,默认值是fastcgi_buffer的2倍
#fastcgi_cache TEST;
#设置缓存在共享内存中的名称. 一块区域可以被用于不用的地方.
#开启fastcgi缓存并为其指定为TEST名称,降低cpu负载,防止502错误发生.
#502,bad gateway,脚本执行超过timeout设置时间,或者timeout设置过大,导致php进程长时间不能被释放。
#应答代码缓存时间,200和302应答缓存为1个小时,301一天,其他1分钟
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
#fastcgi_hide_header name
#默认情况下Nginx 不会从FastCGI 进程里给客户端发送"Status" 和"X-Accel-..." 消息头。
#这个指令可以用来掩饰别的headers 。如果需要"Status" 和"X-Accel-..." 消息头,
#那就需要使用这个指令让FastCGI 强制发送消息头给客户端。
#fastcgi_ignore_client_abort on|off
#这个指令用来决定忽略用户取消的请求。
#fastcgi_param parameter value
#该指令指定的参数,将被传递给FastCGI-server。
server {
listen 80;
server_name localhost;
root "/var/www";
location ~ \.php(.*)$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
#fastcgi_split_path_info指令来设置PATH_INFO
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
#SCRIPT_FILENAME 是PHP 用来确定执行脚本的名字,而参数QUERY_STRING 是它的一个子参数
#fastcgi_param QUERY_STRING $query_string;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
fastcgi_params
fastcgi_param QUERY_STRING $query_string;#查询字符串
fastcgi_param REQUEST_METHOD $request_method;#请求方式
fastcgi_param CONTENT_TYPE $content_type;#客户端请求头中的content-type值
fastcgi_param CONTENT_LENGTH $content_length;#客户端请求头中的content-length值
fastcgi_param SCRIPT_NAME $fastcgi_script_name;#脚本名称
fastcgi_param REQUEST_URI $request_uri;#请求uri
fastcgi_param DOCUMENT_URI $document_uri;#请求的URI
fastcgi_param DOCUMENT_ROOT $document_root;#当前请求所属的root指令设置的文档根目录路径
fastcgi_param SERVER_PROTOCOL $server_protocol;#协议及版本号
fastcgi_param REQUEST_SCHEME $scheme;#所用的协议,http/https
fastcgi_param HTTPS $https if_not_empty;#有 https 协议时才自动使用 https on,否则忽略这个参数。$https – 如果链接是 SSL 就返回 “ON”,否则返回空字符串。if_not_empty; – 当参数有值时才传递到服务器。
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;#客户端的IP地址
fastcgi_param REMOTE_PORT $remote_port;#客户端的端口
fastcgi_param SERVER_ADDR $server_addr;#服务器IP
fastcgi_param SERVER_PORT $server_port;#服务器服务端口
fastcgi_param SERVER_NAME $server_name;#服务器名称(如域名)
# PHP 编译用了 --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
#缓存配置
#fastcgi_cache/proxy_cache相关指令集
fastcgi_cache/proxy_cache
#fastcgi_cache zone_name;
#该指令用于设置哪个缓存区将被使用
fastcgi_cache_path/proxy_cache_path
#语法:fastcgi_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
#设置缓存文件的存放路径
#fastcgi_cache_path /usr/local/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_one:10m inactive=1m max_size=1g ;
#http标签内
#levels指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层为2个字母,保存的
#文件名会类似/usr/local/nginx/fastcgi_cache_dir/c/29/XXXX;
#keys_zone参数用来为这个缓存区起名,
#500m指内存缓存空间大小为10MB;
#inactive的1d指如果缓存数据在1分内没有被访问,将被删除;
#max_size的30g是指硬盘缓存空间为1GB
fastcgi_cache_methods/proxy_cache_methods
#默认缓存HTTP GET/HEAD 方法 不缓存HTTP POST方法
fastcgi_cache_min_uses number
#该指令用于设置缓存的最小使用次数,默认值为1.
fastcgi_cache_valid/proxy_cache_valid
#fastcgi_cache_valid reply_code [reply_code...] time;
#该指令用于对不同返回状态码的URL设置不同的缓存时间
fastcgi_cache_valid 200 302 10m ;
fastcgi_cache_valid 404 1m ;
#设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.
#如果不指定状态码,直接指定缓存时间,则只有200,301,302状态的URL缓存5分钟.
fastcgi_cache_key/proxy_cache_key
#该指令用来设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存
#开启nginx缓存
#设置Web缓存区名称为nginx_cache_one,
#内存缓存空间大小为10M,
#缓存的数据超过1分钟没有被访问就自动清除;
#访问的缓存数据,硬盘缓存空间大小为1G
#proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=nginx_cache_one:10m inactive=1m max_size=1g;
#临时文件
#proxy_temp_path /usr/local/nginx/proxy_temp_path;
#proxy_cache_path proxy_temp_path手动创建同一磁盘分区
#fastcgi_temp_path和fastcgi_cache_path
fastcgi_temp_path /usr/local/nginx/fcgi_temp_path;
fastcgi_cache_path /usr/local/nginx/fcgi_cache_path levels=1:2 keys_zone=nginx_fcgi_cache_one:200m inactive=1m max_size=1g;
server {
listen 8001;
location ~ \.php(.*)$ {
#缓存区
fastcgi_cache nginx_fcgi_cache_one ;
#对不同的HTTP状态码缓存设置不同的缓存时间
fastcgi_cache_valid 200 10m ;
fastcgi_cache_valid 301 302 1h ;
fastcgi_cache_valid any 1m ;
fastcgi_cache_key php7.0-fpm$request_uri;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
#gzip on;
gzip on;
#开启或者关闭gzip模块
gzip_min_length 1k;
#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
#默认值是0,不管页面多大都压缩。
#建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024
gzip_buffers 4 32k;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
#4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。
#4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
#如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.1;
#识别http的协议版本。
#由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,
#用户就会看到乱码,所以做一些判断还是有必要的。
#注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,
#99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。
gzip_comp_level 2;
#gzip压缩比,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;
#匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。
gzip_vary on;
gzip_disable "MSIE [1-6].";
#gzip_proxied
#gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]
#Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,
#匹配的前提是后端服务器必须要返回包含"Via"的 header头。
#off - 关闭所有的代理结果数据的压缩
#expired - 启用压缩,如果header头中包含 "Expires" 头信息
#no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
#no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
#private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
#no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
#no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
#auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
#any - 无条件启用压缩
upstream apache {
server 192.168.5.107:80;
}
#开启nginx缓存
proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=nginx_cache_one:10m inactive=1m max_size=1g;
#临时文件
proxy_temp_path /usr/local/nginx/proxy_temp_path;
server {
listen 8000;
location / {
root html;
index index.html index.htm index.php;
proxy_pass http://apache;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#客户端的IP地址(中间无代理则是真实客户端IP,有代理则是代理IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_next_upstream [error|timeout|invalid_header|http_500|http_503|http_404|off]
#指令确定在什么情况下请求将被传输到下一个服务器
#当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载
#只有当没有向客户机传输任何内容时,才可能将请求传输到下一个服务器
#也就是说,如果在传输请求的过程中出现错误或超时,则不可能在另一台服务器上重试当前请求。
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90;
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
#proxy_ignore_client_abort on; #如果客户端断开请求,也保持后端的下载
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
proxy_pass http://apache;
#缓存区nginx_cache_one
proxy_cache nginx_cache_one ;
#不同HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 1h ;
proxy_cache_valid 301 302 1m ;
proxy_cache_valid any 1m ;
proxy_cache_key $host$uri$is_args$args;
#proxy_no_cache
#定义满足条件的响应不会被保存到缓存中。
#在条件字符串中至少有一个条件不为空或者0,符合这样条件的响应才不会被缓存。
#proxy_cache_bypass
#定义哪些情况不从cache读取,直接从backend获取资源
#ngx_cache_purge模块
#安装第三方purge模块可以清除指定url缓存
#或直接删除缓存目录下的文件
}
}
#upstream分配策略
#weight(权重)
upstream tttt{
server 111.111.111.111 weight=2;
server 111.111.111.222 weight=4;
}
#ip_hash(访问ip)
#每个ip固定访问一个服务器 解决session的问题
upstream tttt{
ip_hash;
server 111.111.111.111;
server 111.111.111.222;
}
#fair
#后端服务器响应时间短的优先
upstream tttt{
server 111.111.111.111;
server 111.111.111.222;
fair;
}
#url_hash
#url的hash分配 使每个url定向同一服务器 缓存时比较有效
#不能加入weight等参数 hash_method使用的hash算法
upstream tttt{
server 111.111.111.111;
server 111.111.111.222;
hash $request_uri;
hash_method crc32;
}
#upstream状态值
#down 不参与负载.
#weight 权重
#max_fails允许失败次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误跳到下一服务器
#fail_timeout : max_fails次失败后,暂停的时间
#backup备用机
upstream bakend{
ip_hash;
server 111.111.111.111 down;
server 111.111.111.222 weight=2;
server 111.111.111.99 max_fails=2 fail_timeout=30s;
server 111.111.111.100 backup;
}
参考文档:https://www.kancloud.cn/wizardforcel/nginx-doc/92351