🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] * * * * * nginx配置文件是一个纯文本的文件,一般都是位于nginx的安装目录下,在我的文档nginx的配置文件处于/app/nginx/conf/nginx.conf,默认的安装路径的配置文件在/usr/local/nginx/conf/nginx.conf。它的**配置文件都是以block的形式组织**的,每个block一般都是以括号“{}”来表示的。**主要包括全局,event,http,server等设置,event主要定义nginx的工作模式,http提供web功能,server用来设置虚拟主机,**server可以存在多个 Nginx配置文件结构: * * * * * ![](https://box.kancloud.cn/2016-08-12_57ad79e78a017.png) * * * * * ###1. 配置main模块 下面说明main模块中的几个关键参数。 1.1 error_log: * * * * * 用于配置错误的日志,以及日志级别。可使用于main,http,server以及location上下文中; 语法格式: error_log file | stderr [debug | info |notice | warn | error | crit | alert | emerg ] 禁用错误日志: error_log /dev/null crit; * * * * * 1.2 timer_resolution: * * * * * 用于降低gettimeofday()系统调用的次数,默认情况下每次从kevent(),epoll,/dev/poll,select()或者poll()返回时都会执行此系统调用。 语法格式为: timer_resolution interval; example: timer_resolution 100ms; * * * * * 1.3 worker_cpu_affinity: * * * * * 通过sched_setaffinity()将worker绑定至cpu上,只能适用于main上下文。 语法格式 : worker_cpu_affinity cpumask ... example1:worker_process 4; worker_cpu_affinity 0001 0010 0100 1000; 上面是指4核cpu开启4个进程 example2:worker_process 2; woker_cpu_affinity 01 10 01 10; 上面是指2核cpu开启4个进程 * * * * * **上面的例子2可以理解为4个进程,第一个进程对应的cpu的01(即第一个cpu内核),第二个进程对应cpu的10(即的第二个cpu内核)... * * * * * 1.4 worker_processes: * * * * * worker进程是单线程进程。如果Nginx用于CPU密集型的场景中,如SSL或gzip,且主机上的CPU个数至少有2个,那么应该将此参数值设定为与CPU核心数相同;如果Nginx用于大量静态文件访问的场景中,且所有文件的总大小大于可用内存时,应该将此参数的值设定得足够大以充分利用磁盘带宽。 此参数与Events上下文中的work_connections变量一起决定了maxclient的值: maxclients = work_processes * work_connections * * * * * 1.5 worker_rlimit_nofile: * * * * * 设定worker进程所能够打开的文件描述的最大数值。 语法格式:woker_rlimit_nofile number * * * * * ###2. 配置Event模块 这个模块是用来设定nginx的工作模式以及连接数上限的。 * * * * * 2.1 worker_connections: * * * * * 设定每个worker所能够处理的最大连接数,他与来自main上下文的worker——processes一起决定了maxclients的值; max clients = worker_processes * worker_connections 而在反向代理场景中,其计算方法与上述公式不同,因为默认情况下浏览器将打开2个连接,而nginx会为每一个连接打开2个文件描述符; max clients = worker_processes * worker_connections/4 * * * * * 2.2 use * * * * * 在有着多余一个事件模型IO的应用场景中,可使用此设置nginx的工作模式,默认为./configure脚本所选定的最适合当年主机的版本。 语法格式: use [ select| poll| kqueuw | rtsig |/dev/poll] select/poll是标准模式,kqueue/epoll是高效模式。kqueue仅仅适合BSD系统。linux首选是epoll * * * * * 2.3 一个配置事例 ~~~ user nginx nginx; worker_processes 2; woker_set_afinity 01 10 01 10; error_log /app/nginx/log/error.log; pid /var/run/nginx/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 2048; } ~~~ ###3. HTTP服务的相关配置 * * * * * http上下文专用于配置用于http的各模块,此类指令非常的多,每个模块都有其专用指定,具体请参数nginx官方wiki关于模块部分的说明。大体上来讲,这些模块所提供的配置指令还可以分为如下几个类别。 客户端类指令:如client_body_buffer_size、client_header_buffer_size、client_header_timeout和keepalive_timeout等; 文件IO类指令:如aio、directio、open_file_cache、open_file_cache_min_uses、open_file_cache_valid和sendfile等; hash类指令:用于定义Nginx为某特定的变量分配多大的内存空间,如types_hash_bucket_size、server_names_hash_bucket_size和variables_hash_bucket_size等; 套接字类指令:用于定义Nginx如何处理tcp套接字相关的功能,如tcp_nodelay(用于keepalive功能启用时)和tcp_nopush(用于sendfile启用时)等; * * * * * example: ~~~ http{ include /app/nginx/conf/mime.types; default application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$gzip_ratio"'; access_log log/access_http.log main; client_max_boby_size 20m; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_time 65; gzip on; client_header_timeout 10; client_boby_timeout 10; send_timeout 10; } ~~~ 基本的http的相关配置以上内容即可。 ###4. 虚拟主机的相关配置 4.1基本语法: ~~~ server { <directive> <parameters>; } ~~~ * * * * * ~~~ server{ listen 8080; #监听端口 server_name www.smyking.com; access_log log/host。access.log main; index index.htm index.jsp; root /var/www/html/ charset utf-8; # error_page 404 @(404.html) # localtion @404.html { # root html; #} } ~~~ * * * * * 4.2 url匹配规则 urld地址匹配是nginx配置最为灵活的的部分,location支持正则表达式匹配,也支持条件判断,用户可以通过location指令实现nginx对动态静态网页的过滤处理。 * * * * * ~~~ location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ root /var/www/smyking/; expires 30d; } ~~~ 将gif,jpg,jpeg,png,swf的静态文件都交给nginx处理,expires是指静态文件的过期时间是30天 * * * * * * * * * * ~~~ localtion ~ ^/(upload|html)/{ root /var/www/smyking; expires 30d; } ~~~ 将upload和html下的所有文件都交给nginx来处理。 * * * * * * * * * * ~~~ localtion ~ .*.jsp${ index index.jsp; proxy http://localhost:9080; } ~~~ 将所有的jsp为后缀的文件都交给本机的9080端口处理 * * * * *