配置文件核心指令:

user: USERNAME [GROUP]  指定Nginx属主属组,属组可以不指定
pid: pid存放路径
worker_rlimit_nofile:  子进程可以打开的最大文件句柄数
worker_rlimit_core:  子进程异常终止后的core文件
worker_rlimit_core 10M;
working_directory /path/to/dir;
worker_processes:  worker子进程数量 auto
worker_cpu_affinity:  CPU绑定 auto(会自动根据CPU梳理做子进程和CPU绑定操作)
worker_priority:  指定Nginx子进程的nice值
worker_shutdown_timeout: 指定子进程优雅退出时间的超时时间
timer_resolution: 子进程内部使用的计时器精度,时间间隔越大,系统调用越少
daemon: 前台或后台运行
events
use:Nginx使用哪种事件驱动模型
worker_connections:worker子进程能够打开的最大并发连接数
accept_mutex:是否打开负载均衡互斥锁
accept_mutex_delay:新连接分配给worker子进程的超时时间
lock_file:负载均衡互斥锁文件存放路径
multi_accept:worker子进程可以接收的新连接个数
debug_connection:能够仅为此 IP/NET 的客户端编写调试日志
devpoll_changes
devpoll_events
kqueue_changes
kqueue_events
epoll_events:以上指令可以使用适当的方法向/从内核传递多少事件
rtsig_signo:使用该rtsig 方法时,nginx 使用两个信号 。该指令指定了第一个信号编号。第二个是加1。
rtsig_overflow_events:指定要通过 poll() 传递的事件数
rtsig_overflow_test:指定在 poll() nginx 处理的事件数量之后将耗尽 rtsig 队列
rtsig_overflow_threshold:仅适用于 Linux 2.4.x。在排空 rtsig 队列之前,nginx 在内核中查看队列是如何填满的
http
alias:设置指定location使用的路径,alias 无法在正则的 location中使用

upstream中设置: 

keepalive
keepalive_requests
keepalive_timeout(客户端到代理服务器,代理服务器到上游web服务器都可以设置)
Nginx变量
TCP连接变量
变量名 含义
remote_addr 客户端IP地址
remote_port 客户端端口
server_addr 服务端IP地址
server_port 服务端端口
server_protocol 服务端协议
binary_remote_addr 二进制的客户端IP地址
connection TCP连接的序号,递增
connection_request TCP连接当前的请求数量
proxy_protocol_addr 若使用了proxy_protocol协议,则返回协议中地址,否则返回空
proxy_protocol_port 若使用了proxy_protocol协议端口,则返回协议中端口,否则返回空

HTTP请求的特殊变量

变量名 含义
host 先看请求行,再看请求头,最后找server_name
http_user_agent 用户浏览器
http_referer 从哪些链接过来的请求
http_via 经过一层代理服务器,添加对应代理服务器的信息
http_x_forwarded_for 获取用户真实IP
http_cookie 用户cookie
HTTP请求中的变量
变量名 含义
request_time 处理请求已消耗的时间
request_completion 请求处理完成返回OK,否则返回空
server_name 匹配上请求的server_name值
https 若开启https,则返回on,否则返回空
request_filename 磁盘文件系统待访问文件的完整路径
document_root 由URI和root/alias规则生成的文件夹路径
realpath_root 将document_root中的软链接换成真实路径
limit_rate 返回响应时的速度上限值

接口转发

location /api/ {

允许请求地址跨域 * 做为通配符

add_header 'Access-Control-Allow-Origin' '*';

设置请求方法跨域

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';

设置是否允许 cookie 传输

add_header 'Access-Control-Allow-Credentials' 'true';

设置请求头 这里为什么不设置通配符 * 因为不支持

add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token';

设置 options 请求处理

if ( $request_method = 'OPTIONS' ) {
 return 200;
 }

下面是一个例子,对于PHP来说的最精简的必要参数:

fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
fastcgi_param  QUERY_STRING     $query_string;
参数SCRIPT_FILENAME 是PHP 用来确定执行脚本的名字,而参数QUERY_STRING 是它的一个子参数。
如果要处理POST,那么这三个附加参数是必要的:
fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param  CONTENT_TYPE     $content_type;
fastcgi_param  CONTENT_LENGTH   $content_length;
如果PHP 在编译时使用了--enable-force-cgi-redirect选项,设置参数REDIRECT_STATUS 的值为200就是必须的了。
fastcgi_param  REDIRECT_STATUS  200;
Nginx HTTP DAV 模块
这个模块可以为Http webDAV 增加 PUT, DELETE, MKCOL, COPY 和 MOVE 等方法。