本機上的虛擬機html
Centos7.4node
Docker1.13.1linux
Openssl1.1.1
nginx
1. 建立Dockerfileweb
2. 建立鏡像docker
docker build -t nginx_http
3. 建立容器測試apache
(1) 不掛載:tomcat
docker run --name nginx81 -p 81:80 -d nginx_http
測試網頁和容器下的html目錄都能正常訪問安全
(2) 掛載:bash
docker run --name nginx83 -p 83:80 -d -v $PWD/html:/usr/share/nginx/html nginx_http
掛載主機目錄Docker訪問出現Permission denied
網頁訪問出現403 Forbidden
緣由是CentOS7中的安全模塊selinux把權限禁掉了,至少有如下三種方式解決掛載的目錄沒有權限的問題:
1) 在運行容器的時候,給容器加特權,及加上 --privileged=true 參數
2) 臨時關閉selinux:setenforce 0
3) 添加selinux規則,改變要掛載的目錄的安全性文本
docker run --name nginx83 -p 83:80 -d -v $PWD/html:/usr/share/nginx/html --privileged=true nginx_http
添加權限後測試網頁和容器目錄能正常訪問
1. 準備配置文件default.conf
直接從容器中拷貝default.conf
docker cp nginx81:/etc/nginx/conf.d/default.conf ./
2. 經過openssl生成證書和私鑰
(1)生成21024位的加密私鑰,這裏須要設置兩遍密碼,生成server.key
openssl genrsa -des3 -out server.key 1024
(2)生成證書籤名請求(CSR),須要填寫許多信息,如國家,省市,公司等
openssl req -new -key server.key -out server.csr
(3)去除密碼
1. mv server.key server.key.org
2. openssl rsa -in server.key.org -out server.key
(4)生成類型爲X509的自簽名證書。有效期設置365天
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
完成這一步以後就獲得了咱們須要的證書文件server.crt和私鑰server.key
3. 配置nginx服務器,支持https訪問
修改配置文件default.conf,添加ssl支持
4. 建立Dockerfile
5. 生成鏡像
docker build -t nginx_https .
6.生成容器測試
docker run --name nginx448 -p 448:443 -d nginx_https
訪問測試網頁
1. 準備配置文件default.conf
直接從容器中拷貝default.conf
docker cp nginx81:/etc/nginx/conf.d/default.conf ./
2. 經過openssl生成證書和私鑰
使用1.2節中生成的證書和私鑰,將生成的crt和key存入ssl目錄中
3. 配置nginx服務器,支持https訪問
修改配置文件default.conf,添加ssl支持、配置安全選項,具體配置以下
4. 建立Dockerfile
5. 生成鏡像
docker build -t nginx_http2 .
6.生成容器測試
docker run --name nginx449 -p 449:443 -d nginx_http2
訪問測試網頁
這裏能夠看到,協議已變成了HTTP/2.0
1. 建立Dockerfile
2. 建立鏡像
docker build -t apache_http .
3. 建立容器測試
docker run --name apache85 -p 85:80 -d apache_http
訪問測試網頁
1. 準備配置文件httpd.conf、httpd-ssl.conf
直接從容器中拷貝httpd.conf、httpd-ssl.conf
1. docker cp apache85:/usr/local/apache2/conf/httpd.conf ./
2. docker cp apache85:/usr/local/apache2/conf/extra/httpd-ssl.conf ./
2. 經過openssl生成證書和私鑰
同1.2節中證書和私鑰生成步驟,將生成的crt和key存入ssl目錄中
3. 修改httpd-ssl.conf文件指定相關祕鑰和證書位置
修改
1. ServerName www.server.com:443 2. SSLCertificateFile "/usr/local/apache2/conf/server.crt" 3. SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
4. 修改Apache主配置文件並開啓相關模塊
1. // 打開相關的註釋,啓用須要的模塊 2. LoadModule rewrite_module modules/mod_rewrite.so 3. LoadModule ssl_module modules/mod_ssl.so 4. LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 5. Include conf/extra/httpd-ssl.conf 6. // 修改主機名 7. ServerName www.server.com
5. 建立Dockerfile
6. 生成鏡像
docker build -t apache_https .
7.生成容器測試
docker run --name apache444 -p 444:443 -d apache_https
訪問測試網頁
1. 準備配置文件httpd.conf、httpd-ssl.conf
直接從容器中拷貝httpd.conf、httpd-ssl.conf
1. docker cp apache85:/usr/local/apache2/conf/httpd.conf ./
2. docker cp apache85:/usr/local/apache2/conf/extra/httpd-ssl.conf ./
2. 經過openssl生成證書和私鑰
使用1.2節中生成的證書和私鑰,將生成的crt和key存入ssl目錄中
3. 修改httpd-ssl.conf文件指定相關祕鑰和證書位置
修改
1. ServerName www.server.com:443 2. SSLCertificateFile "/usr/local/apache2/conf/server.crt" 3. SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
4. 修改Apache主配置文件httpd.conf,並開啓https和http2相關模塊
1. //打開相關的註釋,啓用須要的模塊 2. LoadModule rewrite_module modules/mod_rewrite.so 3. LoadModule ssl_module modules/mod_ssl.so 4. LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 5. Include conf/extra/httpd-ssl.conf 6. LoadModule http2_module modules/mod_http2.so 7. //修改主機名 8. ServerName www.server.com
5. 啓用 HTTP2 協議
默認狀況下,服務器並無啓動 HTTP/2 協議,用新的 Protocols 指令啓用 HTTP/2 協議
Protocols h2 http/1.1
6. 建立Dockerfile
7. 生成鏡像
docker build -t apache_http2 .
6.生成容器測試
docker run --name apache446 -p 446:443 -d apache_http2
訪問測試網頁
這裏能夠看到,協議已變成了HTTP/2.0
1. 建立Dockerfile
這裏須要在容器的/usr/local/tomcat/webapps下建立html目錄,用來存放網頁
2. 建立鏡像
docker build -t tomcat_http .
3. 建立容器測試
docker run --name tomcat8080 -p 8080:8080 -d tomcat_http
訪問測試網頁
1. 準備配置文件server.xml
直接從容器中拷貝server.xml
docker cp tomcat8080:/usr/local/tomcat/conf/server.xml ./
2. 經過openssl生成證書和私鑰
同1.2節中證書和私鑰生成步驟,將生成的crt和key存入ssl目錄中
3. 修改server.xml配置文件,配置https服務
4. 建立Dockerfile
一樣,須要在容器的/usr/local/tomcat/webapps下建立html目錄,用來存放網頁
5. 生成鏡像
docker build -t tomcat_https .
6.生成容器測試
docker run --name tomcat445 -p 445:443 -d tomcat_https
訪問測試網頁
1. 準備配置文件server.xml
直接從容器中拷貝server.xml
docker cp tomcat8080:/usr/local/tomcat/conf/server.xml ./
2. 經過openssl生成證書和私鑰
使用1.2節中生成的證書和私鑰,將生成的crt和key存入ssl目錄中
3. 修改server.xml配置文件,配置https、啓用http2
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
4. 建立Dockerfile
一樣,須要在容器的/usr/local/tomcat/webapps下建立html目錄,用來存放網頁
5. 生成鏡像
docker build -t tomcat_http2 .
6.生成容器測試
docker run --name tomcat447 -p 447:443 -d tomcat_http2
訪問測試網頁
這裏能夠看到,協議已變成了HTTP/2.0
1. 建立Dockerfile
2. 建立鏡像
docker build -t lighttpd_http .
3. 建立容器測試
docker run -d -–name=lighttpd8081 -p 8081:80 lighttpd_http bash
測試網頁和容器下的html目錄都能正常訪問
1. 經過openssl生成證書
生成類型爲X509的自簽名證書。有效期設置365天。須要填寫許多信息,如國家,省市,公司等
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
2. 配置lighttpd服務器,支持https訪問
修改配置文件lighttpd.conf,添加ssl支持
4. 建立Dockerfile
5. 生成鏡像
docker build -t lighttpd_https .
6.生成容器測試
docker run -d -–name=lighttpd8082 -p 8082:443 lighttpd_https bash
訪問測試網頁
Lighttpd目前不支持HTTP/2
當前lighttpd版本是1.4.5
1. 建立Dockerfile
2. 建立鏡像
docker build -t caddy_http .
3. 建立容器測試
docker run -d -–name=caddy8084 -p 8084:80 caddy_http
測試網頁和容器下的html目錄都能正常訪問
5.2 HTTPS
5.3 HTTP2
5.4 QUIC
Quic在具備TSL基礎上採用CMD命令
caddy -conf /etc/Caddyfile -quic
開啓服務,因此首要條件就是要先搭建出HTTPS協議
試用了多種Caddyfile寫法
有的沒法啓動容器,有的啓動容器成功但沒法鏈接服務器,還有可鏈接到服務器,但出現:No such site at:443
到目前爲止,下面這種寫法是最接近成功的,須要再實驗
本文是18年暑期入組培訓的時候跟師妹一塊兒完成報告,其中大部分工做都是師妹完成的,在此感謝師妹zhanglei