目录

2638264600 的个人博客

记录精彩的程序人生

nginx相关说明

https://github.com/freshWinter/LinuxSRE/tree/master/application-service/nginx

https://github.com/freshWinter/LinuxSRE/tree/master/application-service/nginx

nginx -s reload :不重启服务的情况下重新加载配置文件

不加选项:启动nginx服务

-h或-?选项:查看nginx命令帮助

-v选项:查看nginx版本信息

-V选项:查看nginx编译信息

-c选项:启动nginx时指定主配置文件

-t或-T选项:测试nginx.conf文件是否存在语法错误

-s选项:向正在运行的nginx主进程发送信号,信号的可用值有stop, quit, reopen, reload

alias指令只能在location块中使用,而root指令则不然,root会拼接location的路径,alias不会。

$remote_addr变量:记录了客户端的IP地址(普通情况下)。
$remote_user变量:当nginx开启了用户认证功能后,此变量记录了客户端使用了哪个用户进行了认证。
$time_local变量:记录了当前日志条目的时间。
$request变量:记录了当前http请求的方法、url和http协议版本。
$status变量:记录了当前http请求的响应状态,即响应的状态码,比如200、404等响应码,都记录在此变量中。
$body_bytes_sent变量:记录了nginx响应客户端请求时,发送到客户端的字节数,不包含响应头的大小。
$http_referer变量:记录了当前请求是从哪个页面过来的,比如你点了A页面中的超链接才产生了这个请求,那么此变量中就记录了A页面的url。
$http_user_agent变量:记录了客户端的软件信息,比如,浏览器的名称和版本号。

nginx -s reopen 等效于:kill -USR1 NginxMasterPid
"nginx -s reload"命令与"kill -HUP NginxMasterPid"命令的作用是一样的。
TERM或者INT:表示立即停止nginx
QUIT:表示优雅的停止nginx
HUP:重载配置文件
USR1:重新打开日志文件
USR2:热升级nginx程序
WINCH:优雅的关闭相应的worker进程

#很多配置中对Host的设置使用了h o s t 变量,因为 host变量,因为host变量,因为host中不含端口号信息,所以会丢失端口号,解决办法为修改h o s t 为 host为host为http_post或h o s t : host:host:server_port
proxy_set_header Host $host:$server_port;
#这两种配置都可以,其中$http_post是$http_HEADER的匹配规则,取的是请求头中host的属性值
proxy_set_header Host $http_host;

附表 nginx.conf中可以使用的变量
变量名 定义
$arg_PARAMETER GET请求中变量名PARAMETER参数的值
$args 这个变量等于GET请求中的参数。例如,foo=123&bar=blahblah;这个变量只可以被修改
$binary_remote_addr 二进制码形式的客户端地址。
$body_bytes_sent 传送页面的字节数
$content_length 请求头中的Content-length字段。
$content_type 请求头中的Content-Type字段。
$cookie_COOKIE cookie COOKIE的值。
$document_root 当前请求在root指令中指定的值。
$document_uri 与$uri相同。
$host 请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写,不包含端口。
$hostname 机器名使用 gethostname系统调用的值
$http_HEADER HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值);
$sent_http_HEADER HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线),例如: $sent_http_cache_control, $sent_http_content_type…;
$is_args 如果$args设置,值为"?“,否则为”"。
$limit_rate 这个变量可以限制连接速率。
$nginx_version 当前运行的nginx版本号。
$query_string 与$args相同。
$remote_addr 客户端的IP地址。
$remote_port 客户端的端口。
$remote_user 已经经过Auth Basic Module验证的用户名。
$request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body 这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
$request_body_file 客户端请求主体信息的临时文件名。
$request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空。
$request_method 这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
$scheme 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr 服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name 服务器名称。
$server_port 请求到达服务器的端口号。
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri 请求中的当前URI(不带请求参数,参数位于args,不同于浏览器传递的args),不同于浏览器传递的request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html

location / {

允许跨域的请求,可以自定义变量$http_origin,*表示所有

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

允许携带cookie请求

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

允许跨域请求的方法:GET,POST,OPTIONS,PUT

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

允许请求时携带的头部信息,*表示所有

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

允许发送按段获取资源的请求

add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

一定要有!!!否则Post请求无法进行跨域!

在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求

if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;

对于Options方式的请求返回204,表示接受跨域请求

return 204;
}
}

Nginx常用命令

nginx -s reopen #重启Nginx
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令
killall nginx #杀死所有nginx进程

标题:nginx相关说明
作者:三学一心
地址:http://bk.isseeker.com/articles/2021/02/19/1613691013110.html