Java项目部署+域名解析+小程序配置请求

作者: 小疯子 分类: Java 发布时间: 2020-03-24 13:02

目的

想开发个项目,后台用springboot实现,前端是小程序,因为小程序请求后台必须是ssl请求,https:// 开头的域名请求,所以为了能够前后端通起来,就需要拥有申请域名+域名解析+ssl的后台项目来给小程序做支持,由此进行了如下的一系列操作这里记录一下。

一、项目部署

  1. 项目打包安装jar
    mvn clean install -Ponline来指定打包的环境,这样就会将application_online.properties中的数据覆盖到yml中了,否则一直是dev默认的
    具体maven配置见:Spring Boot——多环境动态选择配置文件
    这里就写个简单的请求/hello 返回个helloworld字符串的项目实验一下;
  2. 杀死已经启动的
    如果之前启动过jar那么先杀死
    ps aux|grep testjar.jar
    kill -9 pid
  3. 将文件传至服务器
    (有winscp等传送工具可以使用工具,我是直接用了mac的命令行)
    scp testjar.jar root@服务器ip:/data/wwwroot/javaproject
  4. 服务器上启动项目
    在项目所在目录下执行:
    nohup java -jar [jar包的完整路径] --spring.profiles.active=运行环境 > 日志路径 &
    其中 nohup &指的是后台运行
    eg:
    nohup java -jar testjar.jar --spring.profiles.active=online > testjarlog/log.out &
  5. 打开项目的端口号
    linux 上的/etc/sysconfig/iptables添加项目端口号(此处是centos7,如果是6可能是需要用service命令启动)
    然后systemctl restart iptables重启\
    查看端口使用 netstat -aptn | grep -i 8085
    我的服务器整体控制只开启了80开头的一个范围,所以这里给项目就配8085端口启动吧
  6. 测试
    在服务器上执行curl http://服务器ip实际的非localhost:8085/hello 测试能否被访问
    或者postman或者浏览器访问以上url看是否返回helloworld相关字符串

二、域名解析

1. 阿里云域名解析

阿里云后台将申请的域名进行解析到我的服务器ip上;解析完后ping一下域名看看是否真的连到我的服务器上ip上了,没问题
ping 域名

阿里云域名解析有个人版的免费的,可以申请解析,留意过期时间为1年,具体操作到阿里云后台查看文档即可很简单

2. nginx配置

step1. 服务器下载nginx。一种是源码安装,一种是yum安装。介绍最简单的yum安装
yum install nginx
step2. nginx反向代理,这样就可以访问代理到非默认80端口的项目上了,yum安装conf的路径为:/etc/nginx/nginx.conf
查看nginx.conf路径
[root@feng ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
查看nginx安装路径 ps -ef | grep nginx:啊啊这个不对因为我是用yum安装的见这个路径说明链接:https://blog.csdn.net/qq_38384568/article/details/80760208
nginx网上资料反向代理配置:

上面代码反向代理意思就是www.xxx.xyz访问时会默认访问www.xxx.xyz:80,而这个呢就会被反向代理到127.0.0.1:8085下实际上就是访问这个链接
反向代理重要作用是配合upstream实现负载均衡
我的nginx配置

相关资料搜索
proxy_set_header Host $host这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的
场景:在用Nginx做反向代理的时候,加入转发的地址后一直所有API都返回的状态码404,看upstream的时候健康检查没有问题。经过老大的解决后加了一行proxy_set_header Host $proxy_host就成功转发了,具体代码如下:
location ~ ^/api/([0-9]+)(\.[0-9]+)*/application/ {
    proxy_pass http://xxx.xxx.xxx;
    proxy_set_header Host $proxy_host;
} 
百度后才知道,Nginx需要重写请求头,比如说我们需要访问http://aaa.host.com/api/v1/application,通过nginx转发到http://bbb.newhost.com/api/v1/application,如果没有重写的话,包的请求头仍是aaa.host.com,也就出现了404的情况。$proxy_host表示的代理转发的地址。参见这篇https://blog.csdn.net/weixin_41585557/article/details/82426784

step3. 修改完后重启nginx
如下命令可参考:

systemctl start nginx.service
systemctl restart nginx.service
systemctl stop nginx.service
systemctl reload nginx.service
systemctl status nginx.service

报了400badrequest错误:nginx中upstream后面的名称不能使用下滑线,Nginx不能识别
解决方法:将miniprogram_inventory改为miniprograminventory

三、https ssl

到阿里云上申请个ssl证书个人版是免费的
官方阿里云教程:https://help.aliyun.com/knowledge_detail/95491.html?spm=5176.2020520154.cas.25.738956a7D32kaa

  1. 首先在Nginx的安装目录下(目前安装目录为/etc/nginx)创建cert目录,将下载的全部文件拷贝到cert目录中。/etc/nginx/cert 。 .perm 和.key文件都放上来
  2. 打开 Nginx 安装目录下 conf 目录中的 /etc/nginx/nginx.conf 文件,找到“HTTPS server”部分。
  3. 指定证书路径,为如下示意并保存:
    server {   
    listen 443;    
    server_name 你网站的域名;    
    ssl on;    
    root html;    
    index index.html index.htm;   
    ssl_certificate   cert/你的证书文件名.pem;    
    ssl_certificate_key  cert/你的证书文件名.key;   
    ssl_session_timeout 5m;   
    ssl_ciphers ECDHE-RSA-AES128-GCM-    SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    
    ssl_prefer_server_ciphers on;    
    location / {        root html;        index index.html index.htm;    }
    }
  4. 重启Nginx,这时候你的站点应该就已经可以通过https方式访问了
    通过nginx -t看是否ssl可用了
    我的配置完整版

    server {#用户输入http自动转到https 这样填写www.xxx.com就会重定向到https://www.xxx.com了
                listen 80;
                server_name 域名.com;
                rewrite ^/(.*) https://$server_name/$1 permanent;
        }
    server {
    listen 80;
    listen 443 ssl;
    server_name 域名.com;
    # ssl on;
    root html;
    index index.html index.htm;
    ssl_certificate   cert/a.pem;
    ssl_certificate_key  cert/a.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
    keepalive_timeout 65;
        keepalive_requests 500;
        proxy_set_header    Host $http_host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-Server $http_host;
    
    location / {
        proxy_pass   http://miniprograminventory; # 127.0.0.1:8082
            proxy_set_header    Host $proxy_host;
    }
    }

    四、小程序配置

    登陆小程序后台,左侧有个开发栏点击后再点开发设置往下拉有服务器域名
    参考:https://blog.csdn.net/CC1991_/article/details/98481770
    到小程序上,重启一下开发工具要不然会提示域名不在合法域名下因为没有异步拉取

0