nginx(2)-到nginx请求如何映射url
发布日期:2022-02-14 16:09:35 浏览次数:26 分类:技术文章

本文共 4879 字,大约阅读时间需要 16 分钟。

文章目录

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

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配置

@RestControllerpublic 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’。

转载地址:https://blog.csdn.net/qq_29595463/article/details/108098747 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringBoot2.x下使用log4j2打印JSON日志(支持ELK机制)
下一篇:RabbitMQ消息确定机制(自动ACK和手动ACK)

发表评论

最新留言

很好
[***.229.124.182]2024年04月09日 17时33分03秒