目录
- 一、下载 nginx
- 二、安装
- 三、查看是否安装成功
- 四、配置
- 五、关闭 nginx
- 六 负载均衡
- 七 配置静态资源
- 1. 根目录下的子目录(root)
- 2.完全匹配(alias)
- 刷新配置(不必重启nginx)
- 八、后端鉴权
一、下载 nginx
打开 nginx 的官网:nginx.org/ ,下载最新的稳定版本
二、安装
1.打开下载的文件位置,然后进行
2.打开 nginx.exe 文件,会出现一个一闪而过的页面
3.然后打开任意一个浏览器,输入 localhost,出现下面的页面,则安装成功。
三、查看是否安装成功
1. win+r打开控制台 c
2. 进入到nginx安装的目录
3. 输入 nginx
4. 如果安装不成功就会反馈错误
5. 出现的错误如果是:[emery] blind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 就是80端口被其他程序占用。
6. 查看80端口占用的程序 关闭并重新执行nginx.exe 文件
四、配置
nginx的配置文件是conf目录下的nginx.conf
默认配置的nginx监听的端口为80
当修改了 nginx的配置文件nginx.conf 时,不需要关闭 nginx 后重新启动 nginx,只需要执行命令 nginx -s reload 即可让改动生效
五、关闭 nginx
(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
(2)使用 taskkill taskkill /f /t /im nginx.exe
六 负载均衡
1.理解:通过修改 nginx 的配置文件 nginx.conf 实现当到访问nginx代理服务器时跳转到指定服务器
2.即当我们依然输入http://localhost:80 时,请求会跳转到我们配置的服务器
我们可以配置多个目标服务器
当服务器 ocalhost:8080 挂掉时,nginx能将请求自动转向服务器 192.168.101.9:8080。上面还加了一个 weight 属性,此属性表示各服务器被访问到的权重,weight 越高被访问到的几率越高
七 配置静态资源
1. 根目录下的子目录(root)
比如url:http://localhost/images/sta1/11.jpg
如果按下图进行配置,则url路径中的/images代表是D:/IEMS/images下的子目录
重定向到图片时路径就会拼接为 D:/IEMS/images/images/sta1/11.jpg
1.将静态资源(如jpg|png|css|js等)放在如下配置的 D:/IEMS/images 目录下
2.然后在 nginx 配置文件中做如下配置(注意:静态资源配置只能放在 location / 中)
3.浏览器中访问 http://localhost:80/1.png 即可访问到 D:/IEMS/images 目录下的 1.png 图片
location /images {
root D:/IEMS/images;
index index.html index.htm;
}
2.完全匹配(alias)
1.比如url:http://localhost/images/sta1/11.jpg
如果按下图进行配置,则url路径中的/images可理解为仅仅是一个代表戳
以下是使用 ^~ 前缀进行定义,只有 url完全匹配 "/images/" 开头时才会执行图片重定向,而不会匹配其他包含 "/images/" 的 url
使用 alias 指令可以确保 Nginx 将 "/images" 开头的 url映射到指定的文件目录,而不会将 "images" 视为根目录下的子目录
2. 比如url:http://localhost/images/sta1/11.jpg
就会重定向到 D:/IEMS/images/sta1/11.jpg下,重定向到图片时路径时后面就不会拼接/images,
如果/images后还有
location ^~ /images/ {
alias D:/IEMS/images/;
index index.html index.htm;
}
刷新配置(不必重启nginx)
当修改了 nginx的配置文件nginx.conf 时,不需要关闭 nginx 后重新启动 nginx
只需要执行命令 nginx -s reload 即可让改动生效
八、后端鉴权
在以下这个配置中,/images/目录下的资源将受到保护
当用户尝试访问这些资源时,Nginx会向后端发送一个认证请求
后端应用程序需要返回一个HTTP 200响应表示认证成功,或者其他响应码表示认证失败。
注意:需要注意的是,这只是一个简单的示例,您需要根据您的具体需求来配置Nginx和后端应用程序。确保后端应用程序能够处理认证请求,并根据您的业务逻辑来返回相应的响应。
location ^~ /images/ {
internal;
alias D:/IEMS/images/;
index index.html index.htm;
# 向后端发送认证请求
auth_request /auth;
# 根据后端应用程序返回的响应来决定是否允许访问
auth_request_set $auth_status $upstream_status;
auth_request_set $auth_username $upstream_http_x_username;
if ($auth_status != 200) {
return 403;
}
}
location = /auth {
internal;
proxy_pass http://backend_server/auth;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Username $remote_user;
}
这段配置代码实现了基于后端应用程序的认证逻辑。让我逐步解释它的执行逻辑和过程:
1. location = /auth:这是一个内部定位块,用于处理认证请求。它的含义是只有当请求的 URI 等于 "/auth" 时才会匹配。因为我们希望认证请求是内部的,不希望外部直接访问,所以使用了internal指令。
2. proxy_pass http://backend_server/auth;:这里配置了代理转发,将认证请求发送给后端服务器的/auth端点。当Nginx收到来自客户端的认证请求时,它会将该请求发送到后端服务器上的/auth端点,并等待后端应用程序的响应。
3. proxy_pass_request_body off;:这个指令告诉Nginx不要传递认证请求的请求体,因为我们只需要URI和头部信息。
4. proxy_set_header Content-Length "";:这个指令将Content-Length头部设置为空,因为我们已经关闭了传递请求体。
5. proxy_set_header X-Original-URI $request_uri;:这个指令将客户端请求的原始URI存储在X-Original-URI头部中,以便后端应用程序可以知道客户端请求的是哪个资源。
6. proxy_set_header X-Username $remote_user;:这个指令将客户端的用户名存储在X-Username头部中,以便后端应用程序可以知道是哪个用户在尝试访问资源。
7. auth_request /auth;:这行代码在 /images/ 路径下的位置块中执行,当客户端请求访问图片资源时触发,向后端发送认证请求。
8. auth_request_set $auth_status $upstream_status;:这行代码用于设置变量 $auth_status,存储上游服务器(即后端服务器)返回的状态码。这个变量表示认证请求的结果。
9. auth_request_set $auth_username $upstream_http_x_username;:这行代码用于设置变量 $auth_username,存储上游服务器返回的 X-Username 头部中的用户名信息。
10. if ($auth_status != 200):这个条件判断用于检查认证请求的结果。如果认证失败,即后端应用程序返回的状态码不是200,那么Nginx会返回403 Forbidden响应,拒绝访问请求的资源。