美文网首页
nginx-(2)到nginx请求如何映射url

nginx-(2)到nginx请求如何映射url

作者: 小胖学编程 | 来源:发表于2020-08-19 17:08 被阅读0次

    1. nginx的常用命令:

    1. 判断nginx的安装位置:whereis nginx
    2. 判断是否启动nginx:ps -ef|grep nginx
    3. 判断nginx是否是80端口:lsof -i 80
    4. 到达nginx的bin目录:cd /usr/local/nginx/sbin
      4.1 启动nginx:nginx
      4.2 关闭nginx:nginx -s quit
      4.3 重启nginx:nginx -s reload

    mac版本下载nginx可以参考:

    2. nginx实现路由的配置

    若服务器只对外暴露80端口,进入的请求需要使用nginx来进行反向负载均衡。

    nginx的流程

    因为nginx只对外暴露80端口。根据nginx路由到代理路径上有两种方式

    方式1:配置域名

    nginx的虚拟主机的配置:

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location / {
                proxy_pass      http://127.0.0.1:8083;
             }
    }
    

    客户端需要配置hosts文件:

    127.0.0.1 test.one.cn
    

    用户发起http://test.one.cn/userT请求,就会被转发到http://127.0.0.1:8083/userT进行处理。

    方式2:配置location

    server {
            listen       80;
            server_name 127.0.0.1;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /user {
                proxy_pass      http://127.0.0.1:8083;
             }
    }
    

    虚拟主机配置多个location,根据url的不同,路由到不同的代理路径上。

    推荐方式1。

    3. proxy_pass配置

    @RestController
    public class NginxController {
        @RequestMapping("p1")
        public String p1() {
            return "p1的服务";
        }
        @RequestMapping("p2/xx")
        public String p2() {
            return "p2的服务";
        }
        @RequestMapping("p2xx")
        public String p3() {
            return "p2xx的服务";
        }
    }
    

    3.1 proxy_pass后有路径

    配置1

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1/ {
                proxy_pass      http://127.0.0.1:8083/p2;
             }
    }
    

    请求路径:http://test.one.cn/p1/xx
    返回结果:p2xx的服务

    结论:nginx在代理请求时,http://127.0.0.1:8083/p2http://test.one.cn/p1/替换。得到http://127.0.0.1:8083/p2xx请求服务器。

    配置2

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1 {
                proxy_pass      http://127.0.0.1:8083/p2;
             }
    }
    

    请求路径:http://test.one.cn/p1/xx
    返回结果:p2的服务

    结论:nginx在代理请求时,http://127.0.0.1:8083/p2替换http://test.one.cn/p1。得到http://127.0.0.1:8083/p2/xx请求服务器。
    配置3

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1 {
                proxy_pass      http://127.0.0.1:8083/p2/;
             }
    }
    

    请求路径:http://test.one.cn/p1/xx
    返回结果:p2的服务

    结论:使用http://127.0.0.1:8083/p2/替换http://test.one.cn/p1得到http://127.0.0.1:8083/p2/xx
    配置4

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1/ {
                proxy_pass      http://127.0.0.1:8083/p2/;
             }
    }
    

    请求路径:http://test.one.cn/p1/xx
    返回结果:p2的服务

    结论:使用http://127.0.0.1:8083/p2/替换http://test.one.cn/p1/得到http://127.0.0.1:8083/p2/xx


    proxy_passip:port/xx格式: 是将proxy_pass的路径去替换请求的域名:端口/location配置。

    若location的配置为/,但是proxy_pass配置了ip:port/xx。那么也使用ip:port/xx替换域名:端口/。

    3.2 proxy_pass只是ip:端口

    proxy_pass的url后不存在/

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1 {
                proxy_pass      http://127.0.0.1:8083;
             }
    }
    

    或者这种配置

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1/ {
                proxy_pass      http://127.0.0.1:8083;
             }
    }
    

    请求路径:http://test.one.cn/p1
    返回结果:p1的服务

    proxy_pass的url后存在/

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1 {
                proxy_pass      http://127.0.0.1:8083/;
             }
    }
    

    或者

    server {
            listen       80;
            server_name test.one.cn;
            access_log  /Users/yexuerui/Documents/nginxlog/local.log  main;
            error_log  /Users/yexuerui/Documents/nginxlog/local-error.log  debug_http;
            location /p1 {
                proxy_pass      http://127.0.0.1:8083/;
             }
    }
    

    请求路径:http://test.one.cn/p1
    返回结果:404异常

    proxy_passip:port格式

    1. 后面存在/时,可以看做是绝对路径,将完全替换http://test.one.cn/p1得到proxy_pass即'http://127.0.0.1:8083/'。
    2. 后面不存在/时,可以看做相对路径,将替换http://test.one.cn得到proxy_pass即'http://127.0.0.1:8083/p1'

    相关文章

      网友评论

          本文标题:nginx-(2)到nginx请求如何映射url

          本文链接:https://www.haomeiwen.com/subject/neldjktx.html