Nginx API 网关简单配置的踩坑

先来讲讲目前的场景吧,目前已有的api项目是跑在apache下的,接下来打算新的业务接口上swoole+imi。为了保证不给前端那边造成困扰,打算新老接口,都用同一个域名(api.xxx.com)。

这时候就需要Nginx了,之前说实话没怎么用过,研究了一下,暂时没什么问题。把配置发出来,供大家参考,也是给自己做一个记录。

首先,我打算Apache和Nginx同时监听80端口,因为Apache下跑的项目如果改其他端口可能会出现一些问题。于是,我把Apache的80端口监听到127.0.0.1上,Nginx的80端口监听到外网的IP上。

upstream abcdef {
  server 127.0.0.1:80;
}

server {
	listen 外网IP:80 default_server;

	server_name api.xxx.com;
	
	location / {
		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://abcdef;
	}
}

如上代码实现了旧项目通过Nginx访问。

下面代码是加入到server中的,可以实现指定请求,去请求另外的地址。

# 访问http://api.xxx.com/abc时候,去请求http://127.0.0.1:8081/abc
location /abc {
    proxy_pass http://127.0.0.1:8081;
}
# 访问http://api.xxx.com/def时候,去请求http://127.0.0.1:8081/def123
location /def {
    rewrite ^ /def123$1;
    proxy_pass http://127.0.0.1:8081;
}

接下来实现https也踩了一个坑,首先https的配置方式:

server {
    listen 外网IP:443 default_server;

    server_name *.xxx.com;

    location / {
        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 https://abcdef;
    }

    ssl on;
    ssl_certificate   /etc/apache2/ssl/nginx-cert.crt;
    ssl_certificate_key  /etc/apache2/ssl/private.key;
    ssl_prefer_server_ciphers on;

}

如上所示,配置一下ssl证书,但ssl_certificate这里有个坑,不能使用和apache一样。需要手动将ca_bundle.crt内容+换行+certificate.crt内容合并,建立一个新文件。如果不这么做,电脑、iOS可以正常请求,但安卓就不行了。通过网上的ssl检测也无法通过,从这里看貌似安卓对证书的验证更加严格,更加安全……

  • 标签
  • 相关文章
  • 发表评论
当前用户:
  • 评论列表