使用域名访问本地项目(域名解析、hosts文件添加IP、域名映射关系,Nginx反向代理,端口映射,请求转发)

使用域名访问本地项目(域名解析、hosts文件添加IP、域名映射关系,Nginx反向代理,端口映射,请求转发)

SpringBoot项目启动后,我们通过浏览器访问页面地址栏填写的是:http://localhost:port 或者 http://127.0.0.1:port再或者是http://本机ip:port

实际开发中,存在多种环境:

  • 开发环境:自己的电脑

  • 测试环境:提供给测试人员使用的环境

  • 预发布环境:数据是和生成环境的数据一致,运行最新的项目代码进去测试

  • 生产环境:项目最终发布上线的环境

如果不同环境使用不同的ip去访问,可能会出现一些问题。为了保证所有环境的一致,我们会在各种环境下都使用域名来访问。

我们会使用以下域名或者类似的域名:

  • 主域名是:www.xxx.com

  • 管理系统域名:manage.xxx.com

  • 网关域名:api.xxx.com

  • ...

但是,这些域名需要指向确切的端口(默认端口是80)。

域名解析

一个域名一定会被解析为一个或多个ip。这一般会包含两步:

  • 本地域名解析

    浏览器会首先在本机的hosts文件中查找域名映射的IP地址,如果查找到就返回IP ,没找到则进行域名服务器解析,一般本地解析都会失败,因为默认这个文件是空的。

    • Windows下的hosts文件地址:C:/Windows/System32/drivers/etc/hosts

    • Linux下的hosts文件所在路径: /etc/hosts

  • 域名服务器解析

    本地解析失败,才会进行域名服务器解析,域名服务器就是网络中的一台计算机,里面记录了所有注册备案的域名和ip映射关系,通常情况下只要域名正确,并且备案通过,一定能找到。

域名没有备案怎么办? 

根据域名解析来看,伪造本地的hosts文件,实现对域名的解析。

在hosts文件中添加

127.0.0.1  域名

 保存hosts文件即可。

命令行窗口ping一下域名,看是否添加成功,不再贴图。

再启动SpringBoot项目,浏览器中输域名加端口号,访问页面!

如果有多个项目,都加上自己的端口,还是比较麻烦,我该怎么办?

如何将请求直接通过域名转移到相对应的端口呢?Nginx可以实现此转发!

Nginx是什么?

两类Web服务器:

  • web应用服务器,如:

    • tomcat

    • resin

    • jetty

  • web服务器,如:

    • Apache 服务器

    • Nginx

    • IIS

区分:web服务器不能解析jsp等页面,只能处理js、css、html等静态资源。

并发:web服务器的并发能力远高于web应用服务器。

代理与反向代理

  • 代理:通过客户机的配置,实现让一台服务器(代理服务器)代理客户机,客户的所有请求都交给代理服务器处理。

  • 反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。

nginx作为反向代理服务器来使用:

  • 我们需要提前在nginx中配置好反向代理的规则,不同的请求,交给不同的真实服务器处理

  • 当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现路由功能

Nginx软件免安装,下载好直接解压,运行nginx.exe即可,一般不建议直接双击运行。

解压完的目录:

  1. conf:配置目录

  2. contrib:第三方依赖

  3. html:默认的静态资源目录,类似于tomcat的webapps

  4. logs:日志目录

  5. nginx.exe:启动程序。

windows下的常用命令

nginx可以通过命令行来启动,操作命令:

  • 启动:start nginx.exe

  • 停止:nginx.exe -s stop

  • 修改配置文件后,重新加载:nginx.exe -s reload

nginx.conf配置示例

nginx中的每个server就是一个反向代理配置,可以有多个server

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
   
    keepalive_timeout  65;

    gzip  on;
	server {
        listen       80;
        server_name  manage.xxx.com;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
			proxy_pass http://127.0.0.1:9001;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
        }
    }
	server {
        listen       80;
        server_name  api.xxx.com;

        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
			proxy_pass http://127.0.0.1:10010;
			proxy_connect_timeout 600;
			proxy_read_timeout 600;
        }
    }
}

配置解析(一个server是一个代理)

    server {
        listen       80;     // 监听的端口
        server_name  api.xxx.com;     // 监听的域名

        proxy_set_header X-Forwarded-Host $host;     // 头信息
        proxy_set_header X-Forwarded-Server $host;     // 头信息
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {     // location:请求映射规则, / 代表映射所有请求路径
            proxy_pass http://127.0.0.1:10010;      // proxy_pass,代理转发。所有以 api.xxx.com和80端口访问的请求,都会被转发给http://127.0.0.1:10010处理
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
        }
    }

​
# cat /usr/local/nginx/conf/vhosts/test.conf
server {
    listen 80;
    server_name www.example.com;


    location /images {
        root /;
        rewrite ^/image/(.*)$ /image/$1 break;
        access_log /usr/local/nginx/logs/test.log main;
    }
    location /upload {
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
        alias /data/upload;
        access_log /usr/local/nginx/logs/upload.log main;
    }
    location /jenkins {
        #反向代理的地址
        proxy_pass ip:port;
        #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        access_log /usr/local/nginx/logs/tomcat_test1.log main;
    }

}

​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值