玩过小程序的人,都知道小程序上线的要求比较苛刻,并不是上架审核苛刻,而是前期的服务器上架比较麻烦,需要配置SSL证书,并且只能使用80端口,或者你已经成功部署了一个微服务,但是当你第二小程序要上线的时候,你发现又需要申请证书,重新配置一遍,非常麻烦,我就在想有办法解决这个问题吗?后来发现Nginx的反向代理可以实现我的想法,然后就撸起袖子就是干了,写这篇文章主要是为了分享我的解决思路
项目是以Tomcat为运行环境,其他运行环境自行百度
1、只需要修改tomcat的server.xml文件端口号就行port=“82”
<Connector port="82" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
2、需要注意的是两个tomcat需要配置各自的profile路径
修改命令
vi /etc/profile
####### JDK #######
export JAVA_HOME=/root/xxx/jdk1.x.x
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
####### 工程1 tomcat1 #######
export CATALINA_BASE=/root/xxx/tomcat1
export CATALINA_HOME=$CATALINA_BASE
export TOMCAT_HOME=$CATALINA_BASE
####### 工程2 tomcat2 #######
export CATALINA_2_BASE=/root/xxx/tomcat2
export CATALINA_2_HOME=$CATALINA_2_BASE
export TOMCAT_2_HOME=$CATALINA_2_BASE
编辑完后记得使用source /etc/profile
才会生效
3、在/tomcat2/bin/catalina.sh添加下面代码,放在此句话下面即可
# OS specific support. $var _must_ be set to either true or
# OS specific support. $var _must_ be set to either true or false.
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME
Nginx的安装,这里就不给出来了,也很简单我这里就放出链接:
需要注意,直接安装如果提示需要依赖包的话运行下面的命令
//一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
安装成功后就是配置Nginx的配置文件了,默认的安装路径在/usr/local/nginx
, 配置文件在/conf/nginx.conf
修改
vi nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#代理项目路径
location /AA { #可以是本地IP localhost
proxy_pass http://localhost/project1/ ;
}
location /BB { #也可以是公网IP和设置端口
proxy_pass http://IP:81/project2/ ;
}
location /CC { #可以映射域名
proxy_pass http://域名:81/project3/ ;
}
location /DD { #可以设置https的项目路径
proxy_pass https://域名:81/project4/ ;
}
#有多少个项目可以一直加
location /xx {
proxy_pass xxx ;
}
}
}
这样就可以配置好了反向代理
以下包含了 Nginx 常用的几个命令:
/usr/local/webserver/nginx/sbin/nginx -t #可以查看配置文件是否有错 /usr/local/webserver/nginx/sbin/nginx -s reload #重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen #重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop #停止 Nginx
在nginx.conf文件配置完代理后,往下拉会看到#HTTPS server的配置,默认是注释掉的,解开注释照着我的配置文件配置 SSL的公钥和私钥文件
server {
listen 443 ssl;
server_name localhost; #填写绑定证书的域名
ssl_certificate xxx.crt;
ssl_certificate_key xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
#代理项目路径
location /prophet {
proxy_pass http://127.0.0.1:82/AA/ ;
}
location /shoplus {
proxy_pass http://127.0.0.1:81/BB/ ;
}
}
下面这一行代码看需求加,有些项目不支持https可以不设置下面这句话
rewrite ^/(.*)$ https://$server_name$1 permanent; #这句是代表 把http的域名请求转成https
这句话加载第一个server 配置里就可以了
配置完后记得重新加载配置文件生效
这样我们的单个SSL证书Nginx反向代理就实现了。
写得不好请见谅,有问题可以直接在评论区提出,如有更好的方法可以分享一下思路,虽然本人已经从运维转做移动端了,但是对服务器还是非常感兴趣的,闲着的时候也会鼓捣一下,希望能找到可以讨论技术的大拿。