谷粒商城Nginx代理网关

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 谷粒商城Nginx代理网关

首先需要在C:\Windows\System32\drivers\etc中的host文件下加入


192.168.56.10 gulimall.com


//192.168.56.10虚拟机的ip地址


本机浏览器请求gulimall.com,通过配置hosts文件之后,那么当你在浏览器中输入gulimall.com的时候,相当于域名解析DNS服务解析得到ip 192.168.56.10,也就是并不是访问java服务,而是先去找nginx。浏览器搜索先在该文件下查找是否有匹配的玩意再进行跳转的。


nginx配置文件介绍

├── client_body_temp
├── conf                              #配置文件目录
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf                      #主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp
├── html                                #初始的静态页面存放目录
│   ├── 50x.html
│   └── index.html
├── logs                                #日志目录
│   ├── access.log
│   ├── error.log
│   └── nginx.pid
├── proxy_temp
├── sbin                                #启动目录
│   └── nginx
├── scgi_temp
└── uwsgi_temp
# 运行用户
user  nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;
#全局错误日志及PID文件及存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
#工作模式及连接数上限
events {
    #单个后台work process进程的最大并发链接数
    worker_connections  1024;  
}
#网页信息
http {
    #设定mine类型,类型由mine。type文件定义
    include       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"';
    #日志文件存储路径/usr/local/...(nginx的安装目录)
    #access_log  logs/access.log  main;
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;
    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #开启gzip压缩 如果没有开启gzip,用户访问我们的时候就是以原图来访问。
    gzip  on;
    #小于1K的文件不适合压缩,下限是1k
    gzip_min_lenth 1k;
    #缓存的内存空间--4个16进制数据流
    gzip_buffers 4 16k;
    #http版本
    gzip_http_version 1.1
    #开启判断客户端和浏览器是否支持gzip
    gzip_vary on;
    #设定虚拟主机配置
    server {
        #监听80端口
        listen       80;
        #定义使用 访问的网址
        server_name  localhost;
        #设置字符编码
        #charset koi8-r;
        #设定本虚拟主机的访问日志
        #access_log  logs/host.access.log  main;
        #默认请求,优先级最低的配置
        location / {
            #定义服务器的默认网站根目录位置 这个root目录其实就是/usr/local目录
            root   html;
            # 匹配任何请求,因为所有请求都是以"/"开始
            # 但是更长字符匹配或者正则表达式匹配会优先匹配
            #定义首页索引文件的名称
            index  index.html index.htm;
        }
        #配置Nginx缓存
        location ~.*\.(jpg|png|gif)$ {
          expires 30d; #缓存存放30天,然后自动清除
        }
        location ~.*\.(css|js)? $ {
          expires 1h; #缓存存放1小时
        }
        #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   html;
        }
    # 对 “/” 启用反向代理,对上面的实例  
    location / {
      proxy_pass http://127.0.0.1:3000;  # 设置要代理的 uri,注意最后的 /。可以是 Unix 域套接字路径,也可以是正则表达式。
      proxy_redirect off; # 设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
      proxy_set_header X-Real-IP $remote_addr; # 获取用户的真实 IP 地址
      #后端的Web服务器可以通过 X-Forwarded-For 获取用户真实IP,多个 nginx 反代的情况下,例如 CDN。参见:http://gong1208.iteye.com/blog/1559835 和 http://bbs.linuxtone.org/thread-9050-1-1.html
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      #以下是一些反向代理的配置,可选。
      proxy_set_header Host $host; # 允许重新定义或者添加发往后端服务器的请求头。
      client_max_body_size 10m; #允许客户端请求的最大单文件字节数
      client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
      proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
      proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
      proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
      proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
      proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
      proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
      proxy_temp_file_write_size 64k;
      #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    }
    # 本地动静分离反向代理配置
    # 所有 jsp 的页面均交由tomcat或resin处理
    location ~ .(jsp|jspx|do)?$ {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://127.0.0.1:8080;
    }
    # 所有静态文件由nginx直接读取不经过tomcat或resin
    location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
      root    /data/www/ospring.pw/public;
      expires 15d;
    }
    location ~ ^/(upload|html)/  {
      root    /data/www/ospring.pw/public/html;
      expires 30d;
    }
    include     vhosts//.conf; 分割配置文件,方便管理
    }
    #这里可以配置多台虚拟主机
    # another virtual host using mix of IP-, name-, and port-based configuration
    #配置虚拟机
    #server {
    # 配置监听端口,只要端口不同就是不同的虚拟主机
    #    listen       8000;
    #    listen       somename:8080;
    #配置访问域名
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    web服务器配置
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

修改nginx/conf/nginx.conf,将upstream映射到我们的网关服务

1.     upstream gulimall{
2.         # 88是网关
3.         server 192.168.56.1:88;
4.     }

修改nginx/conf/conf.d/gulimall.conf,接收到gulimall.com的访问后,如果是/,转交给指定的upstream

  location / {
        proxy_pass http://gulimall;
        proxy_set_header Host $host;
    }

由于nginx的转发会丢失host头,造成网关不知道原host,所以我们添加头信息  

配置gateway为服务器,将域名为**.gulimall.com转发至商品服务。配置的时候注意 网关优先匹配的原则,所以要把这个配置放到后面

    - id: gulimall_host_route
          uri: lb://gulimall-product
          predicates:
            - Host=**.gulimall.com

nginx.conf

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;
    include /etc/nginx/conf.d/*.conf;  # 包含了哪些配置文件
}

conf.d/gulimall.conf

server {
    listen       80;
    server_name gulimall.com  *.gulimall.com;
    location /static {
        root   /usr/share/nginx/html;
    }
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    location / {
        proxy_pass http://gulimall;
        proxy_set_header Host $host;  # 
    }
  upstream gulimall{
        # 88是网关
        server 192.168.56.1:88;
    }
    include /etc/nginx/conf.d/*.conf;  # 包含了哪些配置文件
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
1452 1
Nginx、Kong、Apisix、Gateway网关比较
|
8月前
|
前端开发 Java 应用服务中间件
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
863 0
解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
|
8月前
|
缓存 安全 数据安全/隐私保护
代理,网关和隧道是干什么的?
代理,网关和隧道是干什么的?
128 0
|
4月前
|
JavaScript Java 应用服务中间件
|
3月前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
39 4
|
4月前
|
前端开发 JavaScript Java
谷粒商城笔记+踩坑(3)——商品服务-三级分类、网关跨域
商品服务-三级分类增删改查、跨域问题、逻辑删除
|
8月前
|
负载均衡 算法 应用服务中间件
这些负载均衡都解决哪些问题?服务、网关、NGINX?
这些负载均衡都解决哪些问题?服务、网关、NGINX?
270 1
|
8月前
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
|
8月前
|
监控 应用服务中间件 nginx
FastGateway 一个可以用于代替Nginx的网关
FastGateway 一个可以用于代替Nginx的网关
125 1
|
8月前
|
负载均衡 Java 应用服务中间件
一文速通Nginx网关与gateway网关区分
一文速通Nginx网关与gateway网关区分