如何使docker应用程序使用端口80(http)而不是443(https)

时间:2017-05-28 21:32:22

标签: apache http ssl nginx docker

我最近在运行Apache(禁用SSL)的Ubuntu服务器上安装了this web application

我尝试了多少并不能让应用程序使用http并不重要。尝试了-p标志。然后它暴露端口443并绑定其他东西。我讨厌关于SSL的浏览器警告。我只想在端口8080上使用http。

应用程序使用仅侦听443的nginx。我希望我的应用程序URL看起来像http://localhost:8080此应用程序使用Google OAuth进行登录。我假设它可以用于http。

如何让它在http中工作?

1 个答案:

答案 0 :(得分:1)

你必须编辑nginx.conf才能使用普通的http(nginx永远不会在https端口上说http,仅用于某些错误)

变化:

listen 443;
    server_name localhost;

    access_log /dev/stdout;
    error_log /dev/stderr;

    ssl on;
    ssl_certificate /src/openseedbox/conf/host.cert;
    ssl_certificate_key  /src/openseedbox/conf/host.key;

要:

listen 8080;
    server_name localhost;

    access_log /dev/stdout;
    error_log /dev/stderr;

然后在docker build之后运行:

docker run -p 8080:8080 .......

或者,您可以将Apache设置为反向代理到安全HTTPS nginx的HTTP虚拟主机。但我认为修改nginx配置更容易。

方法#2

您可以添加另一个nginx容器作为反向代理,不确定后面的应用程序是否会中断,但它充当http“plainer”:

搬运工-compose.yml

# Add this:
plain_nginx:
    image: nginx
    volumes:
      - ./plain_nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8080:80
    links:
      - openseedbox

plain_nginx.conf

server {
    listen 80;
    server_name _;

    access_log /dev/stdout;
    error_log /dev/stderr;

    location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Ssl on;
      proxy_pass https://openseedbox;
    }
}

然后从该回购中的./docker/目录执行:

docker-compose up

然后你有http://localhost:8080充当SSL内容的反向代理