# nginx-demo **Repository Path**: hisloth/nginx-demo ## Basic Information - **Project Name**: nginx-demo - **Description**: Nginx 学习 demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-08 - **Last Updated**: 2024-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: Nginx, Java ## README # Nginx是什么? Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。 Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 Nginx 是高性能的 HTTP 和反向代理的 web 服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50000 个并发连接数。 Nginx 支持热部署,启动简单,可以做到 7*24 不间断运行。几个月都不需要重新启动。 # Nginx 默认监听端口 HTTP协议默认使用的端口是80,HTTPS协议默认使用的端口是443。 可以通过修改配置文件,改变默认监听的端口。 # Nginx 可以做哪些事? 1.反向代理:反向代理位于客户端和服务器之间,接收客户端的请求,然后根据配置规则将请求透明地转发到后端服务器,并将服务器的响应返回给客户端。客户端感知不到后端服务器的存在,仿佛所有请求都是直接与反向代理交互。 2.负载均衡:将客户端请求分发到多个后端服务器,比如将客户端请求分发到多个后端服务器。 3.重定向 4.解决跨域问题 5.实现限流方案 ... # Nginx 版本 本项目使用的 Nginx 版本均为 1.26.1。 # 模块介绍 - nginx-install:Docker 安装 Nginx 并启动,参考:[nginx-install](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-install) - nginx-reverse-proxy:反向代理,参考:[nginx-reverse-proxy](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-reverse-proxy) - nginx-redirect:重定向,参考:[nginx-redirect](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-redirect) - nginx-load-balance:负载均衡,参考:[nginx-load-balance](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-load-balance) - nginx-cross-domain:解决跨域问题,参考:[nginx-cross-domain](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-cross-domain) - nginx-limit-flow:限流方案,参考:[nginx-limit-flow](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-limit-flow) - nginx-gray-release:灰度发布,参考:[nginx-gray-release](https://gitee.com/hisloth/nginx-demo/tree/master/nginx-gray-release) # Nginx 内置变量汇总 下面罗列了一些 Nginx 的内置变量。 | 变量名 | 说明 | | --- |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |$arg_name| 请求中的的参数名,即"?"后面的 arg_name=arg_value 形式的 arg_name | |$args| 请求中的参数值 | |$binary_remote_addr| 客户端地址的二进制形式, 固定长度为4个字节 | |$body_bytes_sent| 传输给客户端的字节数,响应头不计算在内;这个变量和 Apache 的 mod_log_config 模块中的"%B"参数保持兼容 | |$bytes_sent| 传输给客户端的字节数 (1.3.8, 1.2.5) | |$connection| TCP连接的序列号 (1.3.8, 1.2.5) | |$connection_requests| TCP连接当前的请求数量 (1.3.8, 1.2.5) | |$content_length| "Content-Length" 请求头字段 | |$content_type| "Content-Type" 请求头字段 | |$cookie_name| cookie名称 | |$document_root| 当前请求的文档根目录或别名 | |$document_uri| 同 $uri | |$host| 优先级如下:HTTP 请求行的主机名 > "HOST"请求头字段 > 符合请求的服务器名 | |$hostname| 主机名 | |$http_name| 匹配任意请求头字段;变量名中的后半部分"name"可以替换成任意请求头字段,如在配置文件中需要获取 http 请求头:"Accept-Language",那么将"-"替换为下划线,大写字母替换为小写,形如:$http_accept_language 即可。 | |$https| 如果开启了 SSL 安全模式,值为"on",否则为空字符串。 | |$is_args| 如果请求中有参数,值为"?",否则为空字符串。 | |$limit_rate| 用于设置响应的速度限制,详见 limit_rate。 | |$msec| 当前的 Unix 时间戳 (1.3.9, 1.2.6) | |$nginx_version| nginx版本 | |$pid| 工作进程的PID | |$pipe| 如果请求来自管道通信,值为"p",否则为"." (1.3.12, 1.2.7) | |$proxy_protocol_addr| 获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串。(1.5.12) | |$query_string| 同 $args | |$realpath_root| 当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径。 | |$remote_addr| 客户端地址 | |$remote_port| 客户端端口 | |$remote_user| 用于 HTTP 基础认证服务的用户名 | |$request| 代表客户端的请求地址 | |$request_body| 客户端的请求主体, 此变量可在 location 中使用,将请求主体通过 proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass 传递给下一级的代理服务器。 | |$request_body_file| 将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要开启此功能,需要设置 client_body_in_file_only。如果将此文件传递给后端的代理服务器,需要禁用 request body,即设置 proxy_pass_request_body off,fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off 。 | |$request_completion| 如果请求成功,值为"OK",如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。 | |$request_filename| 当前连接请求的文件路径,由 root 或 alias 指令与 URI 请求生成。 | |$request_length| 请求的长度 (包括请求的地址, http 请求头和请求主体) (1.3.12, 1.2.7) | |$request_method| HTTP 请求方法,通常为"GET"或"POST" | |$request_time| 处理客户端请求使用的时间 (1.3.9, 1.2.6); 从读取客户端的第一个字节开始计时。 | |$request_uri| 这个变量等于包含一些客户端请求参数的原始 URI,它无法修改,请查看 $uri 更改或重写 URI,不包含主机名,例如:”/cnphp/test.php?arg=freemouse”。 | |$scheme| 请求使用的 Web 协议, "http" 或 "https" | |$sent_http_name| 可以设置任意 http 响应头字段; 变量名中的后半部分"name"可以替换成任意响应头字段,如需要设置响应头 Content-length,那么将"-"替换为下划线,大写字母替换为小写,形如:$sent_http_content_length 4096 即可。 | |$server_addr| 服务器端地址,需要注意的是:为了避免访问 linux 系统内核,应将 ip 地址提前设置在配置文件中。 | |$server_name| 服务器名,例如 www.baidu.com | |$server_port| 服务器端口 | |$server_protocol| 服务器的HTTP版本, 通常为 "HTTP/1.0" 或 "HTTP/1.1" | |$status| HTTP 响应代码 (1.3.2, 1.2.2) | |$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space| 客户端TCP连接的具体信息 | |$time_iso8601| 服务器时间的 ISO 8610 格式 (1.3.12, 1.2.7) | |$time_local| 服务器时间(LOG Format 格式) (1.3.12, 1.2.7) | |$uri| 请求中的当前 URI (不带请求参数,参数位于 $args) |