GVKun编程网logo

为 docker 中的 nginx 配置 https(docker配置nginx文件)

10

本文的目的是介绍为docker中的nginx配置https的详细情况,特别关注docker配置nginx文件的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为dock

本文的目的是介绍为 docker 中的 nginx 配置 https的详细情况,特别关注docker配置nginx文件的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为 docker 中的 nginx 配置 https的机会,同时也不会遗漏关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、55-nginx_conf_https, nginx配置https、centos 下使用 nginx 配置 websocket,https 升级 wss 协议、Docker / Boot2Docker:在OS X上为Docker设置HTTP / HTTPS代理的知识。

本文目录一览:

为 docker 中的 nginx 配置 https(docker配置nginx文件)

为 docker 中的 nginx 配置 https(docker配置nginx文件)

添加 https 已经变得刻不容缓。对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题。但对于个人用户来说,如果能有免费的 SSL/TLS 证书可用将会是非常幸福的事情! 就是一个提供免费 SSL/TLS 证书的网站,由于其证书期限只有三个月,所以需要我们用自动化的方式去更新证书。本文将介绍如何为通过 docker 运行的 nginx 中的站点添加 https 支持,并自动完成证书的更新。本文的演示环境为:运行在 Azure 上的 Ubuntu 16.04 主机(此图来自互联网):

$ docker pull ljfpower/--d --restart=always --expose=--network=webnet --name=/nodedemo

$ -p nginx/ -p logs/{nginx,letsencrypt}

error_log /var/log/nginx/<span>error.log warn;
pid /var/run/<span>nginx.pid;

events {
worker_connections <span>2048<span>;
}

http {
include /etc/nginx/<span>mime.types;
default_type application/octet-<span>stream;

sendfile        on;
keepalive_timeout    </span><span&gt;65</span><span&gt;;
client_max_body_size 10M;

include </span>/etc/nginx/conf.d<span&gt;/*</span><span&gt;.conf;

}

location </span>^~ /.well-known/acme-challenge/<span&gt; { default_type </span><span&gt;"</span><span&gt;text/plain</span><span&gt;"</span><span&gt;; root </span>/usr/share/nginx/<span&gt;html; } location </span>= /.well-known/acme-challenge/<span&gt; { return </span><span&gt;404</span><span&gt;; } location </span>/<span&gt; { proxy_pass http:</span><span&gt;//</span><span&gt;web;</span>

<span> }
}

Let's Encrypt First Time Cert Issue Site Hello HTTPS!

$ docker run --p :-v $()/nginx/conf.d:/etc/nginx/-v $()/nginx/nginx.conf:/etc/nginx/-v $()/logs/nginx:/var/log/-v $()/nginx/html:/usr/share/nginx/--restart=--name=--network=

是一个提供免费 SSL/TLS 证书的网站,它为用户提供了 certbot 工具用来生成 SSL/TLS 证书。方便起见,我们把 certbot 简单的封装到容器中。在用户的家目录下创建 certbot 目录,进入 certbot 目录并把下面的内容保存到 Dockerfile 文件中:

FROM alpine:--]

后执行下面的命令创建 certbot 镜像:

$ docker build -t certbot: .

内容如下:

#!/bin/==( ==/usr/share/Nginx/ domain ${LIST[@]};---v ${WEBDIR}/Nginx/conf.crt:/etc/-v ${WEBDIR}/logs/letsencrypt:/var/log/-v ${WEBDIR}/Nginx/--verbose --noninteractive --quiet --agree---webroot ---email=-d =$? [ $CODE -ne ]; Failed_LIST+= output Failed domains

<span>if [ ${#Failed_LIST[@]} -ne <span>0 ];<span>then
<span>echo <span>'<span>Failed domain:<span>'
<span>for (( i=<span>0; i<${#Failed_LIST[@]}; i++<span> ));
<span>do
<span>echo<span> ${Failed_LIST[$i]}
<span>done
<span>fi

生成新的证书(/home/nick 为当前用户的家目录)。生成的证书被保存在 /home/nick/Nginx/conf.crt/live 目录下,以域名命名的目录下保存着该域名的证书:

一个隐藏的 .well-kNown 目录,这个目录就是在生成证书时创建的:

站点了。

站点配置 SSL/TLS 证书

配置文件就可以了,更新 Nginx/conf.d/default.conf 的内容如下:

server {
listen <span>80<span>;
listen [::]:<span>80<span>;
server_name filterinto.com www.filterinto.com;

location </span>^~ /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
    default_type </span><span&gt;"</span><span&gt;text/plain</span><span&gt;"</span><span&gt;;
    root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span&gt;html;
}
location </span>= /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
    return </span><span&gt;404</span><span&gt;;
}
return </span><span&gt;<a href="https://www.jb51.cc/tag/301/" target="_blank">301</a></span> https:<span&gt;//</span><span&gt;$server_name$request_uri;</span>

<span>}
server {
listen <span>443<span>;
listen [::]:<span>443<span>;
server_name filterinto.com;

# enable ssl
ssl                       on;
ssl_protocols TLSv1 TLSv1.</span><span&gt;1</span> TLSv1.<span&gt;2</span><span&gt;;
ssl_prefer_server_ciphers on;
ssl_ciphers               </span><span&gt;"</span><span&gt;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4</span><span&gt;"</span><span&gt;;

# con<a href="https://www.jb51.cc/tag/fig/" target="_blank">fig</a> ssl certificate

<span> ssl_certificate conf.crt<span>/live/filterinto.com/fullchain.pem;
ssl_certificate_key conf.crt/live/filterinto.com/
<span><span>privkey.pem;

location </span>^~ /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
    default_type </span><span&gt;"</span><span&gt;text/plain</span><span&gt;"</span><span&gt;;
    root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span&gt;html;
}
location </span>= /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
        return </span><span&gt;404</span><span&gt;;
}
location </span>/<span&gt; {
    proxy_pass http:</span><span&gt;//</span><span&gt;web;</span>

<span> }
}
server {
listen <span>443<span>;
listen [::]:<span>443<span>;
server_name www.filterinto.com;

# enable ssl
ssl                       on;
ssl_protocols TLSv1 TLSv1.</span><span&gt;1</span> TLSv1.<span&gt;2</span><span&gt;;
ssl_prefer_server_ciphers on;
ssl_ciphers               </span><span&gt;"</span><span&gt;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4</span><span&gt;"</span><span&gt;;

# con<a href="https://www.jb51.cc/tag/fig/" target="_blank">fig</a> ssl certificate

<span> ssl_certificate conf.crt<span>/live/www.filterinto.com/fullchain.pem;
ssl_certificate_key conf.crt/live/www.filterinto.com/
<span><span>privkey.pem;

location </span>^~ /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
    default_type </span><span&gt;"</span><span&gt;text/plain</span><span&gt;"</span><span&gt;;
    root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span&gt;html;
}
location </span>= /.well-k<a href="https://www.jb51.cc/tag/Now/" target="_blank">Now</a>n/a<a href="https://www.jb51.cc/tag/cme/" target="_blank">cme</a>-challenge/<span&gt; {
        return </span><span&gt;404</span><span&gt;;
}
location </span>/<span&gt; {
    proxy_pass http:</span><span&gt;//</span><span&gt;web;</span>

<span> }
}

删除容器 gateway 并用下面的脚本重新创建:

$ docker run --p :-p :-v $()/Nginx/conf.d:/etc/Nginx/Nginx/conf.crt:ro \ -v $()/Nginx/Nginx.conf:/etc/Nginx/Nginx.conf:ro \ -v $()/logs/Nginx:/var/log/Nginx \ -v $()/Nginx/html:/usr/share/Nginx/--restart=--name=--network=Nginx:

站点了:

自动更新证书

方法。添加下面两条记录就可以了:

* * /home/nick/certbot/renew_cert. /home/nick >> /home/nick/logs/cert.log >> /home/nick/logs/ * * docker exec gateway Nginx -s reload

Nginx 的配置。

站点(还是免费的)!在方便的同时,其隐患也是显而易见的:既然谁都可以无门槛的获得 SSL/TLS 证书,那么非法网站也可以通过它把自己伪装成看上去合法的站点。 所以千万不要片面的认为 HTTPS 站点就是安全的!

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

55-nginx_conf_https, nginx配置https

55-nginx_conf_https, nginx配置https


#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;




    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  ql.gaojilaochacang.com;

        ssl_certificate      /home/gpkey/gp.pem;
        ssl_certificate_key  /home/gpkey/gp.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            proxy_pass  http://127.0.0.1:8080;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_http_version 1.1;
            # for websocket 
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    
    server {
        listen 80;
        server_name ql.gaojilaochacang.com;
        #将请求转成https
        rewrite ^(.*)$ https://$host$1 permanent;
    }

}

centos 下使用 nginx 配置 websocket,https 升级 wss 协议

centos 下使用 nginx 配置 websocket,https 升级 wss 协议

服务端代码 /***/

// 服务端代码
var express = require(''express'');
var app = express();
var path = require(''path'');
var server = require(''http'').createServer(app);
var io = require(''socket.io'')(server);
var port = process.env.PORT || 5000;

server.listen(port, () => {
  console.log(''Server listening a1111 port %d'', port);
});

io.on(''connection'', (socket) => {
  socket.on(''add user'', (username) => {
    	console.log(username)
  });
});

  客户端代码 /****/ 使用 socket.io/2.2.0

var socket = io();
    socket.on(''login'', (data) => {
        console.log(''login'')
        socket.emit(''add user'', {1:2});
    });

    socket.on(''disconnect'', (data) => {
        console.log(''disconnect'')
        socket.emit(''add user'', {1:2})
    });

    socket.on(''connect'', (data  ) => {
        console.log(''connect'')
        socket.emit(''add user'', {1:2})
    });

  配上 nginx 的配置

location /socket {
            #此处改为 socket.io 后端的 ip 和端口即可
            proxy_pass http://xxx.xxx.xx.xx:5000;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
}

  

Docker / Boot2Docker:在OS X上为Docker设置HTTP / HTTPS代理

Docker / Boot2Docker:在OS X上为Docker设置HTTP / HTTPS代理

简而言之 :如何在Mac OS X上为Docker设置HTTP / HTTPS代理?

详细说明

我在代理后面的Mac OS
X上运行Docker(1.12)。我按照安装说明进行操作,并安装了boot2docker。如果我从网络内部Docker注册表中提取信息,则此方法工作正常。

但是,从docker.io拉出时出现以下错误:

machine:~ me$ docker run ubuntu echo hello worldUnable to find image ''ubuntu'' locallyPulling repository ubuntu2014/06/30 13:23:26 Get https://index.docker.io/v1/repositories/ubuntu/images:dial tcp: lookup index.docker.io: no such host

注1DOCKER_HOSThttp_proxyhttps_proxy在环境中可用(运行env显示全部三个)。

注2 :我在其他帖子中读到,当守护程序无法正常运行时,会发生此错误。但是,dockerversion没有显示任何问题。此外,我可以拉出并运行从网络内部Docker注册表中拉出的映像。

注3 :我能够在Red Hat
Linux(RHEL)上设置Docker
。我必须将代理信息添加到/etc/sysconfig/docker。我读到Ubuntu(/etc/init/docker.conf)上有一个类似的文件。但是,在Mac
OS X上找不到用于Docker的文件(或boot2docker?)。

答案1

小编典典

您需要修改的配置文件将不在您的OS X文件系统上,它们将被附加到充当本地Docker服务器的Tiny Core Linux VM。

要为此配置代理,请首先从“应用程序”启动Boot2docker。启动后,获取一个终端窗口并SSH进入虚拟机:

bash-3.2$ boot2docker sshWarning: Permanently added ''[localhost]:2022'' (RSA) to the list of known hosts.                        ##        .                  ## ## ##       ==               ## ## ## ##      ===           /""""""""""""""""\___/ ===      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~           \______ o          __/             \    \        __/              \____\______/ _                 _   ____     _            _| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __| ''_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ ''__|| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ ||_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|boot2docker: 1.0.1             master : cad5ece - Fri Jun 20 02:03:40 UTC 2014docker@boot2docker:~$

现在创建/修改/ var / lib / boot2docker / profile来设置代理信息:

docker@boot2docker:~$ sudo vi /var/lib/boot2docker/profile

Tinycore需要如下的代理信息:protocol:// ip:port
为安全起见,我同时设置了HTTP和HTTPS代理。

export HTTP_PROXY=http://your.proxy.name:8080export HTTPS_PROXY=http://your.proxy.name:8080

现在,您可以重新启动VM docker服务并退出VM。

docker@boot2docker:~$ sudo /etc/init.d/docker restartdocker@boot2docker:~$ exitConnection to localhost closed.

您现在应该能够对VM实例运行客户端。

bash-3.2$ docker search ubuntuNAME                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDubuntu                                           Official Ubuntu base image                      356                  stackbrew/ubuntu                                 Official Ubuntu base image                      39                   crashsystems/gitlab-docker                       A trusted, regularly updated build of GitL...

通过重新启动VM可以保留此更改。您只需要执行一次。

出于记录,VirtualBox为代理设置了全局首选项设置,但是我在那儿尝试的所有方法都没有用。

关于为 docker 中的 nginx 配置 httpsdocker配置nginx文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、55-nginx_conf_https, nginx配置https、centos 下使用 nginx 配置 websocket,https 升级 wss 协议、Docker / Boot2Docker:在OS X上为Docker设置HTTP / HTTPS代理的相关信息,请在本站寻找。

本文标签: