使用Nginx 反向代理Node , http 和 https
测试环境在阿里云Ubuntu 16.04.3 LTS
Nginx 版本 1.10.3
Nginx 安装不说了。目录的话,Ubuntu 在 /etc/nginx下
首先找到nginx.conf这货
里面有一个http{。。。}
长这样:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
server_names_hash_bucket_size 64;
server_name_in_redirect off;
include /etc/nginx/mime.types;
include /etc/nginx/vhost/*.conf;
default_type application/octet-stream;
# ssl on;
#下面还好多不说了反正在这里这个ssl需要注释掉
这时候在nginx 根目录下建立一个文件夹,我的叫vhost
然后在nginx.conf 里面 include住,
include /etc/nginx/vhost/*.conf;
在这个文件夹下面建立一个xxx.conf 的配置文件即可
里面内容如下
upstream node1 {
server [::]:3000;
server 127.0.0.1:3000;
}
upstream node2 {
server [::]:3001;
server 127.0.0.1:3001;
}
underscores_in_headers on;
map $http_my_header $pool{
default "dev1";
condition1 "node1";
condition2 "node2";
}
server {
listen 443;
listen [::]:443 ipv6only=on;
server_name xxxxxxxxxxxx;
access_log /var/log/nginx/xxx.log;
ssl on;
ssl_certificate 你的证书;
ssl_certificate_key 你的key
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_pass http://$pool;
proxy_set_header X-NginX-Proxy true;
}
}
从上面的代码中我们可以看到我有2 个nodejs 的app
其中一个分别监听3000 和3001 端口
并且开启了ipv6的监听
然后下面那个 underscores_in_headers 默认为off 意思就是如果你的头部有下划线就忽略掉,那么很显然我不想忽略所以设置成on
接着我打算根据请求头来访问不同的nodejs 服务
就是map开头的语句啦
最后就是配置server 然后监听https的默认端口
一切搞定之后
输入 sudo nginx -t 测试一下,ok的话就可以 sudo _nginx -s reload 重启了。
这个就是nginx 反向代理nodejs 以及根据不同请求头来代理不同nodejs 的简单示范,希望对你们有帮助。
网友评论