通过Https访问Parse Server和Parse Dashboard

使用Docker在MacOS上部署Parse Server和Parse Server Dashboard这篇文章提到,我们的部署只能通过Http访问,而目前几乎所有的服务器访问都要求使用Https访问,所以本篇我们着重介绍如何通过Https访问Parse Server和Parse Dashboard

先说结论和实现方案,最后再讨论一些其他的探索过程。

结论:通过Nginx的反向代理来实现

我们先来看Parse Server的Https访问

参考使用Docker在MacOS上部署Nginx并配置Https,我们映射了Nginx的配置文件到本地,即工程目录下的./nginx/conf.d/default.conf,编辑该文件的https部分:

server {
   listen  443 ssl;
   server_name  localhost; # 换成自己的host

   ssl_certificate  /etc/nginx/conf.crt/localhost.crt;             #指定证书位置(通过目录挂载到容器内部)
   ssl_certificate_key  /etc/nginx/conf.crt/localhost.key;         #指定私钥位置(通过目录挂载到容器内部)

   location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location /parse/ {
        proxy_pass http://172.17.0.4:1337/parse/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }
}

location /parse/部分是新增的,即所有https://localhost/parse/关联的访问都转向http://172.17.0.1:1337/parse/,请注意,这里我们不能再使用localhost了,我们必须使用parse-server docker容器的内部IP。

如何获得parse docker的内部IP?

docker ps
docker inspect parse-server

通过docker ps命令查看容器名字,然后通过docker inspect 查看该容器的详细内容,然后您就可以看到IPAddress的内容了。

重启Nginx服务器

此时我们使用https://localhost/parse进行测试

curl -X POST \
-H "X-Parse-Application-Id: APPLICATION_ID" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
https://localhost/parse/classes/GameScore

返回结果类似,这样就是执行成功了。

{
  "objectId":"Ixb4yaX8ZH",
  "createdAt":"2022-09-22T04:21:08.928Z"
}
parse-dashboard的Https访问

同样parse-server,我们也通过修改nginx配置文件来配置反向代理,使parse-dashboard支持https的访问。

# 增加https部分设置
server {
   listen  443 ssl;
   server_name  localhost; # 换成自己的host

   ssl_certificate  /etc/nginx/conf.crt/localhost.crt;             #指定证书位置(通过目录挂载到容器内部)
   ssl_certificate_key  /etc/nginx/conf.crt/localhost.key;         #指定私钥位置(通过目录挂载到容器内部)

   location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location /parse/ {
        proxy_pass http://172.17.0.4:1337/parse/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }

    location /parse-dashboard/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://172.17.0.5:4040/parse-dashboard/;
        proxy_ssl_session_reuse off;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
}

注意,这里的/parse-dashboard/是和我们之前在生成parse-dashboard docker时的--mountPath参数是一致的。反向代理指向的地址为parse-dashboard docker的http地址。

此外,我们需要额外修改的是parse-dashboard docker的配置文件,即./parse-dashboard/config/parse-dashboard-config.json

{
    "apps": [
        { 
            "serverURL": "https://localhost/parse",
            "appId": "APPLICATION_ID",
            "masterKey": "MASTER_KEY",
            "appName": "Hello World",
            "mountPath": "parse-dashboard"
        }
    ],
    "users": [
        {
            "user":"parse",
            "pass":"password"
        }
    ]
}

"serverURL"由原先的http://localhost:1337/parse修改为https://localhost/parse

此时我们访问https://localhost/parse-dashboard/就可以正确的访问了

额外的讨论

除了反向代理,我们也可以通过创建基于https进行访问的parse-server和parse-dashboard。

parse-dashboard的docker提供了https的支持,我们可以通过指定--sslKey和--sslCert提供https访问的钥匙和证书,来实现,例如:

cd $HOME/parse.server.docker
docker run \
--name parse-dashboard \
-p 4040:4040 \
-v $(pwd)/parse-dashboard/config/parse-dashboard-config.json:/src/Parse-Dashboard/parse-dashboard-config.json \
-v $(pwd)/parse-dashboard/crt:/src/Parse-Dashboard/crt \
-d parseplatform/parse-dashboard:4.1.4 \
--sslKey /src/Parse-Dashboard/crt/localhost.key \
--sslCert /src/Parse-Dashboard/crt/localhost.crt \
--mountPath /parse-dashboard

这是基于parse-dashboard docker内部的代码实现的,在提供--sslKey和--sslCert参数的情况下,创建了一个https的服务,来启动parse-dashboard。

然而,parse-server的docker目前没有支持创建https的服务,因此不能像parse-dashboard那样。如果我们需要,那么就只能通过修改parse-server docker的代码来实现,这相对来说会稍微复杂一些,单独再开篇来细说吧。

你可能感兴趣的:(通过Https访问Parse Server和Parse Dashboard)