大型商城: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信息。
阅读剩余
版权声明:
作者:Tin
链接:http://www.tinstu.com/2630.html
文章版权归作者所有,未经允许请勿转载。
THE END