大型商城:Nginx-搭建域名访问环境

Docker安装Nginx

# 虚拟机中创建nginx挂载文件夹
mkdir -p /mydata/nginx
# 启动一个临时的nginx容器   端口映射80 版本1.10
docker run -p 80:80 --name nginx -d nginx:1.10
# 将nginx容器中的nginx目录复制到本机的/mydata/nginx目录下
docker container cp nginx:/etc/nginx /mydata/nginx
# 修改复制出来的nginx文件夹名为conf
mv nginx conf
# 停止目前正在运行的nginx容器   也可以不停止直接删除 docker rm -rf nginx
docker stop nginx
# 删除nginx容器
docker rm nginx

新建要用的Nginx

docker run -p 80:80 --name nginx \
-v /mydata/nginx/conf:/etc/nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-d nginx:1.10
# nginx的所有静态页面资源,我们这里都映射到/mydata/nginx/html目录下
# log日志相关信息,映射到/mydata/nginx/logs下

# 设置nginx随docker启动
docker update nginx --restart=always

开放80端口

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
访问虚拟机ip,80端口不用加,默认就是80端口,会出现403 Forbidden,这是因为nginx的静态资源文件夹下没有文件可读取。在/mydata/nginx/html文件夹下创建一个index.html 即可正常打开

整体示意图

反向代理配置

修改host文件:C:\Windows\System32\drivers\etc

新增:192.168.56.10 mall.com

Nginx的配置文件

我们将docker的nginx等文件挂载到了虚拟机,其中/mydata/nginx/conf/nginx.conf就是配置文件。配置文件主要分如下几个部分

  • 全局块:主要配置用户组,worker process的数量、pid存档路径和日志存放路径等
  • Event块:主要设置每个worker process的最大连接数(默认1024),这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
  • Http块:这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块

conf.d文件夹下有一个default.conf配置文件,这个就是一个server块

配置代理

在 conf.d文件夹下新建一个 gulimall.conf,http会自动引入,作为server块

server {
     listen       80;
     server_name  gulimall.com;  #监听来源于gulimall.com 地址
 
     #charset koi8-r;
     #access_log  /var/log/nginx/log/host.access.log  main;
 
     location / {
         # 配置请求转发到192.168.56.1:10000
         proxy_pass http://192.168.56.1:10000
     }
     
     #error_page  404              /404.html;
     
     # redirect server error pages to the static page /50x.html
     #
     error_page   500 502 503 504  /50x.html;
     location = /50x.html {
         root   /usr/share/nginx/html;
     }
     
     location = /50x.html {
         root   /usr/share/nginx/html;
     }
}

负载均衡到网关

nginx负载均衡给网关,网关再负载均衡到对应的服务。(分布式中最重要的一点就是保证高可用,所以处处都要考虑集群)

http全局块中配置upstream

server块负载均衡配置

nginx代理给网关的时候会丢失请求的host信息,所以不要忘记加上proxy_set_header Host $host;如果不加后面网关通过Host断言机制会失效

gateway网关配置

现在我们访问mall.com发现404,这是因为网关没有配置路由规则,不知道路由到哪里。

注意,这里按照Host的断言一定要放到最后面,如果放在最前面,我们通过域名+/api/xxx等接口都会被屏蔽。因为网关会优先匹配Host,他会直接路由给我们商品服务,而商品服务中是没有/api这个请求路径的,需要过滤。

# 配置nginx反向代理路由规则
- id: gulimall_host_route
  uri: lb://gulimall-product   # lb://服务名  进行负载均衡转发
  predicates:   
    - Host=gulimall.com   # 通过Host进行断言

nginx代理给网关的时候会丢失请求的host信息,所以在配置转发的时候,要设置添加Host信息。

 

阅读剩余
THE END