【windows】--- nginx 超详细安装并配置教程

目录

一、下载 nginx

java 复制代码
打开 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)

java 复制代码
比如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 图片
java 复制代码
location /images {
    root   D:/IEMS/images;
    index  index.html index.htm;
}

2.完全匹配(alias)

java 复制代码
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后还有
java 复制代码
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和后端应用程序。确保后端应用程序能够处理认证请求,并根据您的业务逻辑来返回相应的响应。
java 复制代码
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响应,拒绝访问请求的资源。
相关推荐
运维&陈同学34 分钟前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
是阿建吖!35 分钟前
【Linux】进程状态
linux·运维
明明跟你说过1 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
梓仁沐白5 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
九鼎科技-Leo9 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
朝九晚五ฺ10 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe11 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒11 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
Yang.9911 小时前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3