1. 程式人生 > 實用技巧 >docker部署nginx,配置SSL證書實現https

docker部署nginx,配置SSL證書實現https

一、拉映象

#docker pull nginx

二、建立並啟動容器

docker run -p 8443:443 --name nginx8443 \
-v /usr/local/docker/nginx8443/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx8443/logs:/var/log/nginx \
-v /usr/local/docker/nginx8443/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx8443/conf/cert:/etc/nginx/cert \
-v /etc/localtime:/etc/localtime \
-d nginx

volume對映引數:
/usr/share/nginx/html:部署網站的根目錄
/etc/nginx/nginx.conf:nginx配置檔案
/etc/nginx/cert:證書存放目錄

說明:因為伺服器上的443埠已經被其他專案佔用,這裡使用8443埠來部署,記得開啟防火牆埠限制。執行時會報如下錯誤:

這是由於/etc/nginx/nginx.conf是目錄,卻被對映到檔案。只需要到/usr/local/docker/nginx8443/conf/目錄下刪除nginx.conf目錄,然後新建一個nginx.conf配置檔案即可,見第三步。

三、新增配置檔案

到/usr/local/docker/nginx8443/conf/目錄下刪除nginx.conf目錄,然後新建一個nginx.conf配置檔案,內容如下:

worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	
	ssl on;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
 
    ssl_certificate /etc/nginx/cert/xxx.pem;     		#證書路徑
    ssl_certificate_key /etc/nginx/cert/xxx.key; 		#請求認證 key 的路徑

	server {
		listen	443;   #監聽埠,ssl預設443埠。如果需要配置多個埠,可以繼續新增server,用不同的埠就行
		server_name  www.xxx.com;   #伺服器域名,需要和申請的證書匹配
		
		location / {
			root  /usr/share/nginx/html;  #網站根目錄,和容器建立時指定的位置一致
			index index.html index.htm;
		}
	}
}

新增完配置檔案後,重啟nginx容器,並檢查下日誌看是否有error。

#docker restart nginx8443
#docker logs nginx8843

四、測試

重啟容器,一切正常後,在/usr/local/docker/nginx8443/html目錄下,新建一個index.html,輸入hello world!,瀏覽器訪問https://www.xxx.com:8443,即可正常訪問。