1.檢查服務器是否安裝nginx,如果未安裝,可參考我之前的文章
Linux系列~docker部署nginx_一夜白頭催人淚-CSDN博客_docker 部署nginx1.新建docker-compose.yml檔案version: '3.1'services: nginx: restart: always image: nginx container_name: nginx ports: - 80:80 volumes: - ./conf.d:/etc/nginx/conf.d - ./nginx.conf:/etc/nginx/nginx.conf - ./log:/v...https://blog.csdn.net/cxl0406/article/details/1202409102.新建目錄用于存放nginx組態檔、證書檔案:
mkdir /opt/docker/nginx/conf.d -p
mkdir /opt/docker/nginx/cert -p
nginx的ssl證書長這個樣子,兩個都要,中間打碼的是自己分服務器域名

把檔案放在 ..nginx/cert目錄下
3.查看內網的ip,記錄下來,等下寫組態檔要用:
# linux查看內網ip
ifconfig
4.如果未映射掛載目錄,可以使用命令查找nginx組態檔
# 查找nginx組態檔default.conf
# 這個在/etc/nginx/conf.d/default.conf
find / -name "default.conf"
# 查找nginx組態檔nginx.conf
# 這個在/etc/nginx/nginx.conf
find / -name "nginx.conf"
# 注:兩者不在同一目錄下,
5. 使用docker的cp命令把這兩個組態檔復制到剛剛建好的目錄下:
# 把docker內的default.conf復制到外部
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d/default.conf
# 把docker內的nginx.conf復制到外部
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf.d/nginx.conf
6.檢查nginx容器是否正在運行
# 查看正在運行的容器
docker ps
# 查看全部容器,包括沒有啟動的容器
# 如果上面的命令出現的串列沒有nginx,使用這個命令
docker ps -a
# 如果確定啟動失敗了,查看日志定位失敗的原因
docker logs nginx
7.當nginx啟動成功后,我們只需要修改組態檔,就可以實作多個域名和https訪問的需求啦,
nginx的組態檔有兩個,nginx.conf和default.conf,
點開看nginx.conf的話,會發現里面引入了default.conf的內容,也就是說這是一個檔案分成兩個檔案來寫,
我們只需要修改default.conf的內容即可達到我們的目的,
修改default.conf的內容為如下,需根據你的情況做出改變:
server {
listen 80; #偵聽80埠
listen 443 ssl; #偵聽443埠,用于SSL
server_name pnhjhj.com www.pnhjhj.com; # 自己的域名
# 注意證書檔案名字和位置,是從/etc/nginx/下開始算起的
ssl_certificate 1_pnhjhj.com_bundle.crt;
ssl_certificate_key 2_pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 這里寫的是我的騰訊云內網地址,不知道為啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8090;
}
}
這上面便配好了一個域名的https和http訪問,假如你想多配一個域名,拿我上面的blog.tandk.com和mail.tandk.com來舉例,每個域名要加多一個server:
server {
listen 80; #偵聽80埠
listen 443 ssl; #偵聽443埠,用于SSL
server_name blog.pnhjhj.com; # 自己的域名
# 注意證書檔案位置,是從/etc/nginx/下開始算起的
ssl_certificate 1_blog.pnhjhj.com_bundle.crt;
ssl_certificate_key 2_blog.pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 這里寫的是我的騰訊云內網地址,不知道為啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8080;
}
}
server {
listen 80; #偵聽80埠
listen 443 ssl; #偵聽443埠,用于SSL
server_name mail.pnhjhj.com; # 自己的域名
# 注意證書檔案位置,是從/etc/nginx/下開始算起的
ssl_certificate 1_mail.pnhjhj.com_bundle.crt;
ssl_certificate_key 2_mail.pnhjhj.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
client_max_body_size 1024m;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 這里寫的是我的騰訊云內網地址,不知道為啥,不能用127.0.0.1...
proxy_pass http://xx.xx.xx.xx:8181;
}
}
配置完畢后,保存、停止容器再重啟:
# 停止nginx
docker stop nginx
# 啟動容器
docker start nginx
# 查看是否啟動成功
docker ps
8.打開瀏覽器,分別用http和https訪問你配置的域名,來確認是否成功,
關于ssl證書的坑
上面的組態檔會發現,兩個server,隨著域名的不同,ssl證書的名字也不一樣了,
對的,對于每一個不同的子域名,我都需要去申請一個ssl證書,
對于mail.pnhjhj.com,我需要去申請一個ssl證書,對于blog.pnhjhj.com,我還需要去申請一個新的ssl證書,
那么能不能申請一個通配的證書去適配一個主域名下的所有子域名呢,
有的,花錢,
別的平臺我不太清楚,騰訊云有那種證書,比如你可以申請一個*.pnhjhj.com的證書,那樣你所有子域名就都能用這個證書了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342056.html
標籤:其他
上一篇:keepalived高可用
