本机通过nginx搭建域名访问环境
按照正常的流程,我们需要一个公网ip地址,再为公网ip地址绑定域名。
当前处于开发环境,我们使用nginx搭建域名访问环境。
首先了解一下,什么是正向代理与反向代理。
- 正向代理就是我们发出请求给服务器,服务器将我们的请求转发给互联网。
- 反向代理就是为了更好的保护后端集群不被攻击,从而找一台服务器暴露在外,用户想要访问内部信息,需要通过公网ip访问代理服务器从而转发给相应服务。
首先当我们输入一个域名地址时,查看系统内部的域名映射规则,要是有的话,浏览器直接跳转。要是系统内部没有域名地址,则会去网络上的DNS,解析出域名,再来转发。话不多说,进入正题!
1.找到hosts文件(建议先备份一下),地址为C:\Windows\System32\drivers\etc
,然后通过SwitchHost软件对其进行修改,软件下载地址https://github.com/oldj/SwitchHosts/releases
。
下载完后解压,以管理员身份运行.exe文件。然后添加自己的域名地址。
注意:需要将hosts文件的只读选项先勾选掉
接下来就可以通过域名访问虚拟机里的地址了
2.让nginx帮我们进行反向代理(所有来自gulimall的请求转发到对应服务)
- 配置nginx
随便启动一个nginx 实例,只是为了复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
将容器内的配置文件拷贝到当前目录:docker container cp nginx:/etc/nginx .
别忘了后面的点
修改文件名称:mv nginx conf 把这个conf 移动到/mydata/nginx 下
终止原容器:docker stop nginx
执行命令删除原容器:docker rm $ContainerId
创建新的nginx;执行以下命令
docker run -p 80:80 --name nginx
-v /mydata/nginx/html:/usr/share/nginx/html
-v /mydata/nginx/logs:/var/log/nginx
-v /mydata/nginx/conf:/etc/nginx
-d nginx:1.10 - 需要对
/mydata/nginx/conf/conf.d/
路径下的gulimall.conf进行编写
location / {
proxy_pass http://192.168.75.1:10000;
}
这里的192.168.75.1通过在本机环境下进cmd命令通过ipconfig
指令即可看到。然后重启nginx访问gulimall.com
3.当然要是在服务比较多的情况下,光改nginx下的config十分的麻烦。我们可以把nginx所有的请求负载均衡给网关,网关再根据匹配规则去查找对应的服务。
- 通过nginx配置上游服务器
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream gulimall{
server 192.168.75.1:88;
}
include /etc/nginx/conf.d/*.conf;
}
通过上游服务器访问本机网关,有多个可通过server继续配置
- 配置gulimall.conf实现负载均衡
server {
listen 80;
server_name gulimall.com;
location / {
proxy_pass http://gulimall;
}
}
重启nginx服务,然后在浏览器输入gulimall.com依旧不行,是由于配置了nginx,但是网关未配置
4.配置网关路由,按照Host地址进行映射。
注意这个配置要放到最后,不然其他的网关配置全部失效
- id: gulimall_host_route
uri: lb://gulimall-product
predicates:
- Host=**.gulimall.com
当配置完网关的映射规则后,发现依旧不行。但原来的地址可以请求到数据,继而分析出是nginx在请求时将头部Host信息丢弃了。重新在gulimall.conf中配置
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
最后发现可以访问了!
总结:首先在本机通过host文件将虚拟机地址映射为网址,然后访问该网址nginx会模拟中转服务器将我们的请求重新发给网关,网关根据path或者host进行服务转发。(本机——>虚拟机——>本机)