#### 1. 安装 - **yum安装** ```bash yum -y install nginx ``` - **编译安装** 官方预置包 : http://nginx.org/packages/centos/7/x86_64/RPMS/ ```bash yum install pcre-devel openssl-devel zlib-devel useradd -r nginx ./configure: --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio make && make install ``` 编译安装nginx选项 ``` --prefix=/etc/nginx 安装路径 --sbin-path=/usr/sbin/nginx 指明nginx程序文件安装路径 --conf-path=/etc/nginx/nginx.conf 主配置文件安装位置 --error-log-path=/var/log/nginx/error.log 错误日志文件安装位置 --http-log-path=/var/log/nginx/access.log 访问日志文件安装位置 --pid-path=/var/run/nginx.pid 指明pid文件安装位置 --lock-path=/var/run/nginx.lock 锁文件安装位置 --http-client-body-temp-path=/var/cache/nginx/client_temp 客户端body部分的临时文件存放路径,如果服务器允许客户端使用put方法提交大数据时,临时存放的磁盘路径 --http-proxy-temp-path=/var/cache/nginx/proxy_temp 作为代理服务器,服务器响应报文的临时文件存放路径 --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 作为fastcgi代理服务器,服务器响应报文的临时文件存放路径 --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 作为uwsgi代理服务器,服务器响应报文的临时文件存放路径 --http-scgi-temp-path=/var/cache/nginx/scgi_temp 作为scgi反代服务器,服务器响应报文的临时文件存放路径 --user=nginx 指明以那个身份运行worker进程,主控master进程一般由root运行 --group=nginx --with-http_ssl_module 表示把指定模块编译进来 ``` - **ubuntu安装** ```bash sudo apt update sudo apt install nginx ``` #### 2. 常用命令 - **启动** ```bash systemctl start nginx # 启动 systemctl restart nginx # 重启 ``` or ```bash nginx # 启动 nginx -s reload #重启 ``` - **停止** ```bash kill -9 pid # 强制停止 pkill -9 nginx # 强制停止 ``` #### 3. 结构 - **组成** ``` /usr/local/nginx/ html是测试页,sbin是主程序 /usr/local/nginx/sbin/ nginx 只有一个程序文件 /usr/local/nginx/html/ 50x.html index.html 测试网页 主配置文件: nginx.conf include conf.d/*.conf :fastcgi,uwsgi,scgi等协议相关的配置文件 mime.types :支持的mime类型 ``` - **注意** ``` 指令必须以分号结尾 内建变量:由Nginx模块引入,可直接引用 自定义变量:由用户使用set命令定义 set variable_name value 引用变量:$variable_name ``` - **主配置文件结构** ``` --------------------------------------- main block:主配置段,也即全局配置段; event { ... }:事件驱动相关的配置; http { ... }:http/https 协议相关的配置段; mail { ... } stream { ... } --------------------------------------- ``` - **http协议相关的配置结构** ``` ------------------------------------------- http { ... ...:各server的公共配置 server { ... }:每个server用于定义一个虚拟主机; server { ... server_name alias location [OPERATOR] URL { ... if CONDITION { ... } } } } ------------------------------------------- ``` #### 4. 配置 帮助文档:http://nginx.org/en/docs/ngx_core_module.html - **正常运行必备的配置** ``` (1) user Syntax: user user [group]; Default: user nobody nobody; Context: main 指定worker进程的运行身份,如组不指定,默认和用户名同名 (2) pid /PATH/TO/PID_FILE 指定存储nginx主进程PID的文件路径 (3) include file | mask 指明包含进来的其它配置文件片断 (4) load_module file 模块加载配置文件:/usr/share/nginx/modules/*.conf 指明要装载的动态模块路径: /usr/lib64/nginx/modules ``` - **性能优化相关的配置** ``` worker_processes number | auto worker进程的数量;通常应该为当前主机的cpu的物理核心数 worker_cpu_affinity cpumask ... worker_cpu_affinity auto [cpumask]:提高缓存命中率 CPU MASK 00000001:0号CPU 00000010:1号CPU ... worker_priority number 指定worker进程的nice值,设定worker进程优先级;[-20,20] worker_rlimit_nofile number worker进程所能够打开的文件数量上限 ``` - **调试、定位** ``` (1) daemon on|off 是否以守护进程方式运行Nignx,默认是守护进程方式 (2) master_process on|off 是否以master/worker模型运行nginx;默认为on,off 将不启动worker error_log file [level] 错误日志文件及其级别;出于调试需要,可设定为(3) debug;但debug仅在编译时使用了“--with-debug”选项时才有效 方式:file /path/logfile; stderr:发送到标准错误 syslog:server-address[,parameter=values]:发送到syslog memory:size 内存 level:debug|info|notice|warn|error|crit|alter|emerg ``` - **事件驱动相关的配置** ``` 格式: ---------- events { ... } ---------- (1) worker_connections number 每个worker进程所能够打开的最大并发连接数数量 总最大并发数:worker_processes * worker_connections (2) use method 指明并发连接请求的处理方法,默认自动选择最优方法 use epoll (3) accept_mutex on | off 处理新的连接请求的方法;on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程,但只有一个进程可获得连接.默认on ``` - **http协议的相关配置** ``` --------------------------------------- http { ... ... server { ... server_name root location [OPERATOR] /uri/ { ... } } server { ... } } --------------------------------------- ``` - **与套接字相关的配置** ``` (1) server { ... } 配置一个虚拟主机 ------------------------------------ server { listen address[:PORT]|PORT; server_name SERVER_NAME; root /PATH/TO/DOCUMENT_ROOT; } ------------------------------------ (2) listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size] default_server 设定为默认虚拟主机 ssl 限制仅能够通过ssl连接提供服务 backlog=number 超过并发连接数后,新请求进入后援队列的长度 rcvbuf=size 接收缓冲区大小 sndbuf=size 发送缓冲区大小 注意: 基于port; listen PORT; 指令监听在不同的端口 基于ip的虚拟主机 listen IP:PORT; IP 地址不同 基于hostname server_name fqdn; 指令指向不同的主机名 (3) server_name name ... 指明虚拟主机的主机名称;后可跟多个由空白字符分隔的字符串 支持*通配任意长度的任意字符;server_name *.magedu.com 支持~起始的字符做正则表达式模式匹配;server_name ~^www\d+\.magedu\.com$ 匹配机制: 首先是字符串精确匹配; 左侧*通配符; 右侧*通配符; 正则表达式 default_server (4) tcp_nodelay on | off; 在keepalived模式下的连接是否启用TCP_NODELAY选项 (5) sendfile on | off; 是否启用sendfile功能 (6) server_tokens on | off | build | string 是否在响应报文的Server首部显示nginx版本 ``` - **定义路径相关配置** ```` (1) root path; 设置web资源路径映射;用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径; 可用的位置:http, server, location, if in location; (2) location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } 在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射; ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置 (3) 符号 = 对URI做精确匹配;例如, http://www.baidu.com/,http://www.baidu.com/index.html ------------------ location = / { ... } ------------------ ~ 对URI做正则表达式模式匹配,区分字符大小写 ~* 对URI做正则表达式模式匹配,不区分字符大小写 ^~ 对URI的左半部分做匹配检查,不区分字符大小写 不带符号 匹配起始于此uri的所有的url 匹配优先级 =, ^~, ~/~*,不带符号 (4) alias path; 定义路径别名,文档映射的另一种机制;仅能用于location上下文 注意 location中使用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/目录下找文件。] (a) root,给定的路径对应于location中的/uri/左侧的/ (b) alias,给定的路径对应于location中的/uri/右侧的/ ``` - **定义客户端请求的相关配置** ``` (1) keepalive_timeout timeout [header_timeout]; 设定保持连接的超时时长,0表示禁止长连接;默认为75s; (2) keepalive_requests number; 在一次长连接上所允许请求的资源的最大数量,默认为100; (3) keepalive_disable none | browser ...; 对哪种浏览器禁用长连接; (4) send_timeout time; 向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长; (5) client_body_buffer_size size; 用于接收客户端请求报文的body部分的缓冲区大小;默认为16k 超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置 (6) client_body_temp_path path [level1 [level2 [level3]]]; 设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量; 16进制的数字; client_body_temp_path path /var/tmp/client_body 1 2 2 ``` - **对客户端进行限制的相关配置** ``` (1) limit_rate rate; 限制响应给客户端的传输速率,单位是bytes/second,0表示无限制 (2) limit_except method ... { ... },仅用于location 限制对指定的请求方法之外的其它方法的使用客户端; method:GET, HEAD, POST, PUT, DELETE MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH ------------------------ limit_except GET { allow 192.168.1.0/24; deny all; } ------------------------ 除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用 ``` - **文件操作优化的配置** ``` (1) aio on | off | threads[=pool]; 是否启用aio功能 (2) directio size | off; 在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m; (3) open_file_cache off; open_file_cache max=N [inactive=time]; nginx可以缓存以下三种信息: 文件的描述符、文件大小和最近一次的修改时间; 打开的目录结构; 没有找到的或者没有权限访问的文件的相关信息; max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理 inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于 open_file_cache_min_users指令所指定的次数的缓存项即为非活动项 (4) open_file_cache_valid time; 缓存项有效性的检查频率;默认为60s (5) open_file_cache_min_uses number; 在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;默认值为1 open_file_cache_errors on | off; 是否缓存查找时发生错误的文件一类的信息;默认值off ``` 最后修改:2019 年 08 月 21 日 11 : 16 AM © 著作权归作者所有