分布式 - 服务器Nginx:一小时入门系列之 return 指令

1. return 指令语法

return指令用于立即停止当前请求的处理,并返回指定的HTTP状态码和响应头信息,它可以用于在Nginx中生成自定义错误页面,或者在Nginx中重定向到另一个URL,它的语法如下:

return code URL
return code text
return code
return URL

其中,code 是 HTTP 状态码,可以是 2xx、3xx、4xx 或 5xx 等。text 是可选的文本信息,用于在响应中返回一些额外的信息。以下是一些示例:

# 返回 200 OK响应
return 200;  
# 返回 404 Not Found 响应,并在响应中包含"Not Found Eroor"文本信息
return 404 "Not Found Eroor";  
# 返回301 永久重定向响应,将请求重定向到 https://example.com
return 301 https://example.com$request_uri;  

状态码:301 永久重定向,302 临时重定向

2. return code URL 示例

启动监听8088端口的ruoyi-admin服务器,启动监听8080端口的tomcat服务器:

# 启动ruoyi-admin服务
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

# 启动tomcat服务
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh

① Nginx 配置文件:/etc/nginx/conf.d/8004.conf

server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_password_file   /home/cert.pass;
    
    location / {
        proxy_pass http://localhost:8088;
    }
}

Nginx服务器的配置文件,它监听8004端口并使用SSL协议进行加密通信。服务器名称为“ruoyi.https”。SSL证书和密钥文件分别位于“/home/server.crt”和“/home/server.key”。SSL协议版本为TLSv1、TLSv1.1和TLSv1.2,加密算法为HIGH:!aNULL:!MD5。

该配置文件中的“location /”指令将所有请求转发到本地8088端口,即Nginx充当反向代理服务器将所有请求转发到本地的另一个服务器上。

② Nginx 配置文件: /etc/nginx/conf.d/8003.conf

server {
    listen 8003;
    server_name ruoyi.loadbalance;

    return 301 https://192.168.1.9:8004;
}

server 块监听端口号8003,并将请求重定向到 https://192.168.1.9:8004。这里使用了 return 指令,表示直接返回指定的 HTTP 状态码和响应头,不再继续处理后续指令。

转发和重定向都是HTTP协议中常用的跳转方式,它们的作用都是将用户请求从一个URL地址转移到另一个URL地址,但它们的实现方式和效果略有不同。

转发是指在服务器端将用户的请求转发到另一个资源进行处理,转发的过程是服务器内部完成的,对于客户端而言,它并不知道服务器进行了转发操作,因此客户端的URL地址不会发生变化。转发可以保留原始请求的信息,如请求参数、请求头等,因此在某些场景下,转发可以更好地满足业务需求。

重定向是指在服务器端将用户的请求重定向到另一个URL地址,重定向的过程是通过向客户端发送一个HTTP响应,让客户端重新发送一个新的请求到重定向的URL地址。重定向会导致客户端的URL地址发生变化,因此客户端需要重新发起一个新的请求,这会增加一定的网络开销。重定向可以实现URL地址的更改,如将HTTP协议的URL地址重定向到HTTPS协议的URL地址。

因此下面的写法是错误的:

server {
    listen 8003;
    server_name ruoyi.loadbalance;

    return 301 https://localhost:8004;
}

③ 重启 Nginx 服务:

[root@nginx-dev ~]# nginx -s reload

④ 测试访问8003端口: http://192.168.1.9:8003

在这里插入图片描述

3. return code text 示例

① 配置Nginx服务器监听8007端口

[root@nginx-dev conf.d]# vi 8007.conf
[root@nginx-dev conf.d]# nginx -s reload
server {
    listen 8007;
    server_name ruoyi.loadbalance;
    return 200 "哈哈,大家好,这是一个测试";
}
server {
    listen 8007;
    server_name ruoyi.loadbalance;
    location /test {
        return 200 "哈哈,大家好,这是一个测试";
    }
}

② 测试:

[root@nginx-dev conf.d]# curl -i  http://192.168.1.9:8007
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Sat, 26 Aug 2023 09:20:19 GMT
Content-Type: application/octet-stream
Content-Length: 39
Connection: keep-alive

哈哈,大家好,这是一个测试

4. return URL 示例

① 配置Nginx服务器监听8007端口

server {
    listen 8007;
    server_name ruoyi.loadbalance;
    
    location /test {
        return https://www.baidu.com;
    }
}

② 页面访问:http://192.168.1.9:8007,会跳转到百度首页。

猜你喜欢

转载自blog.csdn.net/qq_42764468/article/details/132516513