Google Cloud Platform VM:https

时间:2017-08-06 11:51:44

标签: ssl docker https google-cloud-platform docker-compose

Docker在GCP VM中组合运行2个容器:

version: '2'
services:
  db:
    image: mongo:3
    ports:
      - "27017:27017"
  api-server:
    build: .
    ports:
      - "443:8080"
    links:
      - db
    volumes:
      - .:/www
      - /www/node_modules

端口重定向设置为443,防火墙已配置(我猜),但仍然无法通过https连接到服务器。它仅在http://ip_address:443

上可用

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你做错了是你假设只是因为你使用的是端口443,流量就变成了SSL。

如果端口<?php session_start(); include('config.php'); if(!isset($_SESSION['username'])){ header("location: login.php"); } $orderId = $_POST['id']; $qry = "DELETE FROM orders WHERE order_id ='$orderId'"; $result=mysqli_query($connection,$qry); 上的某些内容可以443访问,则意味着您正在443上运行普通的HTTP应用程序。

因此,您的NodeJS服务器将创建一个没有证书和私钥的简单服务器。

您有两种选择

在代码中使用SSL服务器

您可以更新NodeJS代码以作为https服务器进行监听。像下面的东西

http://<IP>:443/

将nginx放在前面以便提供服务

您可以添加带有SSL配置的nginx,然后代理将流量传递到NodeJS应用

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);

您需要创建一个nginx配置文件

version: '2'
services:
  db:
    image: mongo:3
    ports:
      - "27017:27017"
  api-server:
    build: .
    volumes:
      - .:/www
      - /www/node_modules
  nginx:
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./www:/usr/local/var/www

PS:有关详细信息,请参阅https://www.sitepoint.com/configuring-nginx-ssl-node-js/