[Nginx]-外部多端口映射Https443端口配置

Posted Zayne Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Nginx]-外部多端口映射Https443端口配置相关的知识,希望对你有一定的参考价值。

https服务器配置完成后,域名访问默认匹配至443端口,如果想同时通过https域名网址来请求多个对外服务,就需要在nginx配置里来对请求进行规则判断,并匹配至相应的内部端口,这也是Nginx反向代理强大功能之一,本文主要是自己配置过程的记录,欢迎讨论之指正。

Nginx匹配规则

为了实现预期功能,需要在Nginx配置文件下,对443端口添加多个location匹配规则,规则说明如下:

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

多个 location 配置的情况下匹配顺序为:

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配
  • 然后匹配不带任何修饰的前缀匹配。
  • 最后是交给 / 通用匹配
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

总结:所以需求实现的关键,在于利用不同的匹配规则来映射相应的端口。

查找Nginx配置文件路径

如果需要操作的centos服务器的nginx服务不是自己部署配置,就需要利用指令来查找nginx服务的配置文件。

  1. 查看nginx的PID,以常用的80端口为例:

    netstat -anop | grep 0.0.0.0:80
  2. 通过相应的进程ID(比如:4562)查询当前运行的nginx路径:

    ll  /proc/4562/exe
  3. 获取到nginx的执行路径后,使用-t参数即可获取该进程对应的配置文件路径,如:
    ```

    /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


## 添加匹配规则

在已经配置好的443端口下,继续添加location规则

HTTPS server

#
server {
    listen 443;
    server_name localhost;
    ssl on;
    root html;
    index index.html index.htm;
    
    *ssl证书配置规则*
    
    location / {
        proxy_pass  *服务器域名*;
    }

location /testA {
         proxy_redirect off;
       proxy_pass http://localhost:12345;
    }
location /testB{
         proxy_redirect off;
       proxy_pass http://localhost:23456;
    }
}

保存修改后,进行nginx的执行路径,先测试配置文件是否正确:

/usr/local/nginx/sbin/nginx -t

如果正确,重启nginx服务。

/usr/local/nginx/sbin/nginx -s reload

``如果一切正常,则即可在外部通过https://服务器域名/testA`和`https://服务器域名/testB`来完成不同的服务请求


以上是关于[Nginx]-外部多端口映射Https443端口配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx 80端口下HTTPS请求跳转到指定其他端口

nginx listen 端口 443 80 https 和 wss

openwrt内网端口转发,内部使用nginx反代,外部使用https安全访问的方案

Nginx禁止未绑定域名和IP访问443端口

nginx https必须是443吗

Docker推送镜像到私有仓库,https必须要使用443端口吗?