nginx作为一个中间件,对一些协议http,rtmp等请求,进行转发和代请求。并没有多么复杂。像这样的代理中间件还有很多LiteSpeed、HAProxy、Caddy...正向代理,反向代理这样概念指定的是。nginx在为谁做事。
正向:多个客户端去直接访问nginx,nginx通过公网(方便理解)访问到服务资源。
反向:客户端通过公网访问,代理服务接收到转发到多个服务之间。
均衡:作为一个中间站,保证转发后各个服务的压力一致。
nginx.conf
用默认得http配置为例,详细理清里面得配置。
head
user
:指定Nginx Worker进程运行的用户及用户组。worker_processes
:指定工作进程的个数,默认是1个。具体可以根据服务器CPU数量进行设置,比如CPU有4个,可以设置为4。如果不知道CPU的数量,可以设置为auto
。error_log
:用来定义全局错误日志文件输出路径,这个设置也可以放入http
块、server
块、location
块中,以定义更具体的日志输出路径和级别。pid
:用来指定进程PID的存储文件位置。
events
http
server
location
这个详细点,得抄点笔记
location [ = | ~ | ~* | ^~ ] uri { ... }
[]
中的内容是可选的修饰符,用于定义匹配的优先级和类型。uri
是请求的统一资源标识符(URI),用于匹配请求的URL。{}
内是当请求匹配时应用的配置指令。=
:表示精确匹配。如果请求的URI完全等于指定的uri
,则使用该location
块处理请求。这是优先级最高的匹配方式。~
:表示区分大小写的正则表达式匹配。如果请求的URI符合指定的正则表达式,则使用该location
块处理请求。~*
:表示不区分大小写的正则表达式匹配。与~
类似,但忽略URI中字母的大小写。^~
:表示前缀匹配,但一旦匹配成功,就不会再进行正则表达式匹配。这可以提高处理性能,特别是在处理大量静态文件时。
里面得常用参数有,这个也不重要。
location /prod-api/ {
# 设置请求头中的Host字段为请求的主机名
proxy_set_header Host $host;
# 设置请求头中的X-Real-IP字段为客户端的真实IP地址
proxy_set_header X-Real-IP $remote_addr;
# 设置请求头中的X-Forwarded-For字段,以记录原始的客户端IP地址以及任何代理服务器的IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 注意:这里应该根据您的后端服务是否使用HTTPS来设置X-Forwarded-Proto
# 如果后端服务使用的是HTTP,则保持为http;如果是HTTPS,则更改为https
# 假设后端是HTTP服务,但如果您使用HTTPS到Nginx,这里可能需要调整为 $scheme
proxy_set_header X-Forwarded-Proto $scheme;
# 指定后端服务器的地址
# 假设您的后端服务监听在本地8080端口上
proxy_pass http://127.0.0.1:8080;
# 设置客户端请求体的最大允许大小
client_max_body_size 30m;
}
-
root:定义请求的根目录。当请求匹配到该
location
块时,Nginx会将请求的URI附加到root
指令指定的路径后面,以形成完整的文件路径。 -
alias:与
root
类似,但alias
指定的路径会替换掉URI中匹配location
块的部分。这通常用于将请求重定向到非根目录下的特定目录。 -
index:定义当请求是一个目录时,Nginx应该尝试返回的文件列表。如果请求是一个目录,并且没有指定具体的文件名,Nginx会依次尝试这些文件。
-
proxy_pass:将请求代理转发到另一个服务器。这是实现反向代理功能的关键指令。
proxy_pass
后面通常跟一个URL,表示请求应该被转发到的目标地址。 -
rewrite:重写请求的URI。这可以用于实现URL重写、重定向等功能。
rewrite
指令通常与正则表达式一起使用,以匹配并修改请求的URI。 -
try_files:按顺序检查文件是否存在,并使用第一个找到的文件进行请求处理。这可以用于处理静态文件请求,同时提供回退选项。
-
add_header:向响应中添加自定义的HTTP头部。这可以用于设置缓存控制、CORS策略等。
-
return:直接返回响应给客户端,而不是将请求传递给后端服务器或处理文件。这可以用于处理简单的请求,如返回404或500错误页面。
-
fastcgi_pass、uwsgi_pass、scgi_pass等:这些指令用于将请求转发给特定的后端处理程序,如FastCGI、uWSGI或SCGI应用。
nginx.exe
nginx注册成服务比较麻烦不说了,通常直接应用程序启动。
- 基本启动:直接使用
nginx
命令启动Nginx,此时Nginx会使用默认的配置文件(通常是/usr/local/nginx/conf/nginx.conf
或/etc/nginx/nginx.conf
,具体取决于Nginx的安装方式和操作系统)。 - 指定配置文件启动:使用
nginx -c /path/to/nginx.conf
命令启动Nginx,并指定一个非默认的配置文件。 - 快速停止:使用
nginx -s stop
命令快速停止Nginx服务。这种方式会立即停止Nginx,不等待当前正在处理的连接完成。 - 优雅停止:使用
nginx -s quit
命令优雅地停止Nginx服务。Nginx会先关闭监听端口,停止接收新的连接,然后等待当前正在处理的连接完成后再退出。 - 重新加载配置:使用
nginx -s reload
命令重新加载Nginx的配置文件。这允许在不中断当前连接的情况下应用配置更改。 - 检查配置文件:使用
nginx -t
命令检查Nginx的配置文件是否存在语法错误。如果配置文件有问题,Nginx会输出错误信息。 - 详细检查并打印配置:使用
nginx -T
命令除了检查配置文件外,还会将Nginx的默认配置文件和所有通过include
指令引入的文件内容打印到标准输出。 - 重新打开日志文件:使用
nginx -s reopen
命令重新打开日志文件。这可以用于日志轮转,避免在日志切割时丢失日志信息。 - 查看版本信息:使用
nginx -v
命令查看Nginx的版本号,使用nginx -V
命令查看Nginx的版本号以及编译时的配置参数。 - 指定运行目录和配置文件:在启动、停止或重新加载Nginx时,可以通过
-p
参数指定Nginx的运行目录,通过-c
参数指定配置文件。例如,nginx -p /home/nginx -c /home/nginx/nginx.conf
。 - 查看Nginx进程:可以使用
ps aux | grep nginx
命令查看Nginx的进程信息。 - 查看Nginx状态:在某些系统上,可以通过
sudo systemctl status nginx
命令查看Nginx的服务状态(这取决于系统是否使用systemd作为初始化系统)。
*最后,新手最容易搞错的 /
proxy_pass后的url和localtion后url的关系
如果proxy_pass末尾路径写死,就直接配重写指令