本文的目的是介绍为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文件)
- 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文件)
添加 https 已经变得刻不容缓。对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题。但对于个人用户来说,如果能有免费的 SSL/TLS 证书可用将会是非常幸福的事情! 就是一个提供免费 SSL/TLS 证书的网站,由于其证书期限只有三个月,所以需要我们用自动化的方式去更新证书。本文将介绍如何为通过 docker 运行的 nginx 中的站点添加 https 支持,并自动完成证书的更新。本文的演示环境为:运行在 Azure 上的 Ubuntu 16.04 主机(此图来自互联网):
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>65</span><span>;
client_max_body_size 10M;
include </span>/etc/nginx/conf.d<span>/*</span><span>.conf;
}
location </span>^~ /.well-known/acme-challenge/<span> {
default_type </span><span>"</span><span>text/plain</span><span>"</span><span>;
root </span>/usr/share/nginx/<span>html;
}
location </span>= /.well-known/acme-challenge/<span> {
return </span><span>404</span><span>;
}
location </span>/<span> {
proxy_pass http:</span><span>//</span><span>web;</span>
<span> }
}
是一个提供免费 SSL/TLS 证书的网站,它为用户提供了 certbot 工具用来生成 SSL/TLS 证书。方便起见,我们把 certbot 简单的封装到容器中。在用户的家目录下创建 certbot 目录,进入 certbot 目录并把下面的内容保存到 Dockerfile 文件中:
后执行下面的命令创建 certbot 镜像:
内容如下:
<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 的内容如下:
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> {
default_type </span><span>"</span><span>text/plain</span><span>"</span><span>;
root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span>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> {
return </span><span>404</span><span>;
}
return </span><span><a href="https://www.jb51.cc/tag/301/" target="_blank">301</a></span> https:<span>//</span><span>$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>1</span> TLSv1.<span>2</span><span>;
ssl_prefer_server_ciphers on;
ssl_ciphers </span><span>"</span><span>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>"</span><span>;
# 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> {
default_type </span><span>"</span><span>text/plain</span><span>"</span><span>;
root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span>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> {
return </span><span>404</span><span>;
}
location </span>/<span> {
proxy_pass http:</span><span>//</span><span>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>1</span> TLSv1.<span>2</span><span>;
ssl_prefer_server_ciphers on;
ssl_ciphers </span><span>"</span><span>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>"</span><span>;
# 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> {
default_type </span><span>"</span><span>text/plain</span><span>"</span><span>;
root </span>/usr/share/<a href="https://www.jb51.cc/tag/Nginx/" target="_blank">Nginx</a>/<span>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> {
return </span><span>404</span><span>;
}
location </span>/<span> {
proxy_pass http:</span><span>//</span><span>web;</span>
<span> }
}
删除容器 gateway 并用下面的脚本重新创建:
站点了:
自动更新证书
方法。添加下面两条记录就可以了:
Nginx 的配置。
站点(还是免费的)!在方便的同时,其隐患也是显而易见的:既然谁都可以无门槛的获得 SSL/TLS 证书,那么非法网站也可以通过它把自己伪装成看上去合法的站点。 所以千万不要片面的认为 HTTPS 站点就是安全的!
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
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>-></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" >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
#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 协议
服务端代码 /***/
// 服务端代码
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代理
简而言之 :如何在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
注1 :DOCKER_HOST
,http_proxy
并https_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 配置 https和docker配置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代理的相关信息,请在本站寻找。
本文标签: