nginx初学者指南

一、启动、停止和重新加载配置

前提:先要启动nginx

在Windows上启动nginx的步骤如下:

1. 下载并安装nginx。可以从nginx官网下载适合自己操作系统的版本,一般是zip压缩包,解压到指定目录中。

2. 进入nginx的安装目录,找到nginx.exe文件。

3. 双击nginx.exe文件,启动nginx服务。

4. 启动完成后,可以通过输入http://localhost来访问nginx默认页面,如果看到“Welcome to nginx”字样,说明nginx已经成功启动。

如果想要停止nginx的运行,可以使用命令nginx -s stop。如果需要重启nginx,可以使用命令nginx -s reload。

接下来:

实践如下:

现在端口号是81,我改下配置,改成82。

然后执行 nginx -s reload 重新加载

此时,由于更改了配置,原先的端口就不能用了

需要更改位82端口

好的,这就完成了nginx配置的重加载。

原理

二、提供静态功能

准备:

新建一个  data/www 目录(用来放置自己的html页面)

新建一个 data/images 目录 (用来放置自己的图片)

images里放张图片

ww放个自己的html页面

实践

更改一下nginx.conf 配置文件

①注释掉其中所有的内容。

在注释之前,我讲述一下部分的代码的作用。

② 编写nginx.conf文件

这个location块指定了 “/”前缀与来自请求的URI进行比较。 对于匹配请求,URI将添加到 指令,也就是说,到/data/www, 在本地文件系统上形成所请求文件的路径。 如果有几个匹配的location块,nginx 选择前缀最长的一个。 上面的location块提供了最短的 前缀,长度为1, #36825;,如果所有其他的location 块无法提供匹配,将使用此块。

http {
    server {

        location / {
             root /data/www;
        }
             
    }
}

接下来,添加第二个location块:

它将匹配以/images/开头的请求 (location / 虽然也匹配这样的请求, 它是较短的前缀)。

http {
    server {

        location / {
             root /data/www;
        }
        
        location /images/ {
           root /data;
        }
    }
}

③重新加载一下配置文件 nginx -s reload

但是报错了???说没有配置事件,那就给它配置一个。

顺便配置一下它监听的端口(ps:因为我的80端口被占用。默认是localhost:80)

events {
#     worker_connections  1024;
}
http {
    server {
        listen 82;

        location / {
             root /data/www;
        }
        
        location /images/ {
           root /data;
        }
    }
}

现在就可以了。

你试一下,是不是发现还不行!!!因为root配错了

/data 在windows下指的是  D:/data .........

"D:/data/www/index.html" is not found (3: The system cannot find the path specified), client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "localhost:82"

因此换成相对路径

events {
#     worker_connections  1024;
}
http {
    server {
        listen 82;

        location / {
        #  等价于下面  root D:/nginx/nginx-1.22.0-copy/nginx-1.22.0/data/ww  ;
            root data/ww  ;
        }
        
        location /images/ {
        #  root D:/nginx/nginx-1.22.0-copy/nginx-1.22.0/data/images/
        #  这个要认真辨别一下, 当 访问 /images/ , 此时以 data为父路径,data/images/ 。  
        #  http://localhost:82/images/1.jpg   意味着访问  data/images/1.jpg

           root data;
        }
    }
}

三、设置简单代理服务器

1. 准备一个springboot应用、修改nginx.conf


events {
#     worker_connections  1024;
}
http {
    server {
        listen 82;

        location / {
        #  等价于下面  root D:/nginx/nginx-1.22.0-copy/nginx-1.22.0/data/ww  ;
            root data/ww  ;
        }
        
        location /images/ {
        #  root D:/nginx/nginx-1.22.0-copy/nginx-1.22.0/data/images/
        #  这个要认真辨别一下, 当 访问 /images/ , 此时以 data为父路径,data/images/ 。  
        #  http://localhost:82/images/1.jpg   意味着访问  data/images/1.jpg
           root data;
        }


        # 配置反向代理
        location /api/ {
            proxy_pass  http://localhost:8080/ ;
        }
    }
}

2. 访问   http://localhost:82/api/hello

很明显,当访问这个地址时,我们被 代理到了  http://localhost:8080/hello

3. 介绍一下正则表达式(跟本章关系不大...)

四、关于一些配置文件的讲解

1. worker_processes

2. 为什么要使用 keepalive ?

3. 关于location的多种匹配方式

4.  rewrite

它主要用于实现URL重写(rewriting)和重定向(redirecting)。以下是详细讲解如何使用rewrite指令:

基本语法

它主要用于实现URL重写(rewriting)和重定向(redirecting)。以下是详细讲解如何使用rewrite指令:

rewrite regex replacement [flag];
  • regex: 正则表达式,用于匹配请求的URI。如果URI与正则表达式匹配,Nginx将执行重写操作。
  • replacement: 替换字符串,用于替换正则表达式匹配到的部分。可以使用反向引用(如 $1, $2, ...) 引用正则表达式中捕获的组。
  • [flag]: 可选的重写标志(flag),用于控制重写行为。常见的标志有:
    • last: 结束当前重写阶段,继续执行后续的location处理。
    • break: 结束当前重写阶段,不再执行后续的rewrite指令,但继续在当前location内处理请求。
    • redirect: 返回302临时重定向,将浏览器重定向到新的URL。
    • permanent: 返回301永久重定向,将浏览器重定向到新的URL。

4.1 域名跳转

rewrite ^(.*) http://www.hm.com$1 permanent; 是一个Nginx的rewrite指令,用于执行URL重写操作。该指令的具体含义如下:

  • ^(.*):这部分是正则表达式模式,匹配请求的URI(不包括主机名和查询字符串)。^ 表示匹配URI的开始,(.*) 表示匹配任意数量的任意字符,并将其捕获为一个正则组(用括号包围)。在本例中,(.*) 将匹配整个URI。

  • http://www.hm.com:这是重写的目标URL。当匹配到正则表达式时,Nginx将把请求重定向到这个新的URL。

  • $1:在目标URL中,$1 是一个反向引用,表示引用前面正则表达式中捕获的第一个组(即 (.*?))。在这里,它将被替换为实际匹配到的URI部分。

  • permanent:这是一个修饰符,表示这次重写应该以HTTP状态码301(Moved Permanently,永久重定向)进行响应。浏览器收到这样的响应后,不仅会立即跳转到新的URL,还会记住这个重定向关系,以后再访问相同的原始URL时,会自动使用重定向后的URL。

综合上述解释,rewrite ^(.*) http://www.hm.com$1 permanent; 这个指令的意思是:

对于所有请求的URI,Nginx将把它们永久重定向到 http://www.hm.com 加上前缀与原始请求URI相同的部分。换句话说,该指令将把所有对当前服务器的请求,以http://www.hm.com为基址,保持原有的路径和查询字符串不变,进行重定向。

例如,如果客户端请求 http://yourserver.com/some/path?query=param,这个指令会使Nginx返回一个301状态码的响应,告诉客户端应该访问 http://www.hm.com/some/path?query=param。请求的路径/some/path和查询字符串?query=param都被保留并附加到新的域名www.hm.com之后。

五、nginx实现正向代理

其中  $host 这个字段很有趣

举个例子:客户端A,代理服务器B,目标服务器C

A设置自己的代理服务器为B,  然后A给目标服务器C发送请求。此时代理服务器B就会代替A向C发送请求。

因此,引入$host  ,  这个是C对应的主机。 代理服务器可以通过$host获取到C的IP。

六、nginx实现反向代理

1. proxy_pass 加不加 / 

举个简单的例子:

请求 http://example.com/api/some-resource 将被转发到 http://backend.example.com/some-resource

因为加 /  ,所以  /api/some-resource 中 /api被省略掉了。

千万要注意,/some-resource可不会被省略掉

在Nginx配置中,locationproxy_pass 指令一起使用时,location 匹配的路径部分(如 /api)是否会被追加到 proxy_pass 指令指定的目标URL后面,取决于 proxy_pass 指令中目标URL末尾是否包含斜杠 (/) 以及 location 匹配规则的写法。以下是不同情况下 location /api 路径是否会被追加到 proxy_pass 后面的规则:

  1. proxy_pass 目标URL末尾有斜杠 (/):

    • proxy_pass 后面的URL以 / 结尾时,location 匹配的路径(如 /api不会被追加到 proxy_pass 后面。Nginx会将请求转发到指定的完整URL,而忽略location匹配的部分。

    示例:

    location /api {
        proxy_pass http://backend.example.com/;
    }
  •  

    请求 http://example.com/api/some-resource 将被转发到 http://backend.example.com/some-resource

  • proxy_pass 目标URL末尾没有斜杠 (/):

    • proxy_pass 后面的URL不以 / 结尾时,location 匹配的路径(如 /api会被自动追加到 proxy_pass 后面。这意味着Nginx会拼接location中的匹配路径和请求的实际路径,形成完整的转发URL。

    示例:

  • location /api {
        proxy_pass http://backend.example.com;
    }
  1. 请求 http://example.com/api/some-resource 将被转发到 http://backend.example.com/api/some-resource

总结来说,location /api 路径是否会追加到 proxy_pass 后面,关键在于观察 proxy_pass 指令中目标URL的末尾是否有斜杠 /。有斜杠时,不会追加;无斜杠时,则会追加。这有助于控制请求在被Nginx代理到后端服务器时如何精确地重写URL路径。

2.

七、利用nginx配置https

ssl_certificate: 为当前这个虚拟主机指定一个带有 PEM 格式证书的证书。

server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /etc/nginx/ssl/your_certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/your_private_key.key;

    # 可选:SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

    # 可选:SSL 会话缓存配置
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 可选:HSTS 配置
    add_header Strict-Transport-Security "max-age=31536000" always;

    # 可选:SSL OCSP Stapling 配置
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location / {
        # 这里配置你的代理或者静态文件服务等
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值