目錄
- 一、基礎環境準備
- 1、安裝docker
- 2、下載nginx鏡像
- 二、http轉https、https轉http的應用
- 1、nginx反向代理單個web專案
- ①準備組態檔
- ②創建容器
- 2、nginx安裝ssl證書(外部https轉內部http,http重定向到https)
- ①準備組態檔
- ②創建容器
- 3、一個nginx代理多個web專案
- ①準備組態檔
- ②創建容器
- 三、使用nginx代理tcp埠(以redis為例)
- 1、安裝redis
- 2、修改nginx.conf 組態檔
- 3、啟動nginx
注:本次運行環境,考慮到docker可移植性比較強,所以本次環境全部以docker為基礎做的,如果你的nginx直接裝在主機中,路徑與容器內部是不同的,僅可參考組態檔內容
- 測驗環境:
作業系統:centos 7.9(GUI 桌面版本、最小化安裝均可)
docker版本:19.03.5
nginx:1.21.3 - 以下為nginx簡介,后邊步驟中,將根據需要使用以下內容,注意以下的目錄可以根據自己喜好修改名稱及位置,但是要確保和組態檔以及容器掛載的路徑相匹配
-p 表示映射埠(冒號左側為主機埠)
-v 表示掛載目錄(冒號左側為主機目錄)
-d 表示后臺運行
docker run --name nginx -p 16379:6379 -p 443:443 -p 80:80 \
-v /data/nginx/data:/usr/share/nginx/html \
-v /data/nginx/config/nginx.conf:/etc/nginx/nginx.conf\
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/logs:/var/log/nginx \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
一、基礎環境準備
1、安裝docker
- 查看內核版本,需要高于3.10,并且系統是64位
[root@k8s-master ~]# uname -r
- 直接使用yum install docker 默認拉取最早版本的docker,我個人在使用中出現了問題,也沒做過多的資料查找,選擇安裝19版本的
- 如果之前安裝過老版本docker,需要先進行卸載
[root@k8s-master ~]# yum remove docker*
2、下載nginx鏡像
- 拉取nginx鏡像
[root@localhost ~]# docker pull nginx
- 查看鏡像版本
[root@localhost ~]# docker image inspect nginx:latest | grep -i version
- 可更換鏡像標簽,保存鏡像,方便后期使用
[root@localhost ~]# docker tag nginx:latest nginx:1.21.3
[root@localhost ~]# docker save -o nginx.tar nginx:1.21.3
二、http轉https、https轉http的應用
1、nginx反向代理單個web專案
①準備組態檔
- 創建檔案default.conf,寫入以下內容:
server {
listen 80; #表示監聽nginx容器得80埠
server_name localhost; #填寫主機名或域名
location / {
proxy_pass http://192.168.1.1:8080; #需要代理的內網主機IP以及8080埠號
}
}
②創建容器
- 將default.conf 放入主機存盤的目錄,主機目錄:/data/nginx/config/conf.d/
- 與之對應的容器目錄:/etc/nginx/conf.d/
- 必須先準備好檔案,再去創建容器
[root@localhost ~]# docker run --name nginx -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-d nginx:1.21.3
- 容器啟動完成后,在瀏覽器中輸入裝有nginx的主機IP地址,即可跳轉到所代理的web專案
2、nginx安裝ssl證書(外部https轉內部http,http重定向到https)
①準備組態檔
- 首先在阿里云或其它地方申請好證書,這里不做贅述了
- 創建檔案default.conf,寫入以下內容:
server {
# listen 80; #此處僅演示了證書功能,未引入80埠
listen 443 ssl;
server_name localhost; #這里也可以用你的域名
# rewrite ^(.*)$ https://$host$1; #如果需要把http重定向到https,嘗試以下方法
# return 301 https://$host$request_uri; #如果需要把http重定向到https,嘗試以下方法
ssl_certificate /ssl/xxx.com.pem; # xxx.com.pem 這名稱根據實際做修改
ssl_certificate_key /ssl/xxx.com.key; # xxx.com.key 這名稱根據實際做修改
ssl_session_timeout 5m;
# 指定密碼為openssl支持的格式
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on; #依賴SSLv3和TLSv1協議的服務器密碼將優先于客戶端密碼
location / {
proxy_pass http://192.168.1.1:8080; #需要代理的內網主機IP以及8080埠號,根據實際需要做調整
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
②創建容器
- 將default.conf 放入主機存盤的目錄,主機目錄:/data/nginx/config/conf.d/
- 將證書放入主機存盤的目錄,主機目錄:/data/nginx/ssl/
docker run --name nginx -p 443:443 -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
容器啟動完成后,在瀏覽器中輸入“https://域名",即可跳轉到所代理的web專案
3、一個nginx代理多個web專案
①準備組態檔
- 首先在阿里云或其它地方申請好證書,這里不做贅述了
- 創建檔案default.conf,寫入以下內容:
server {
# listen 80; #此處僅演示了證書功能,未引入80埠
listen 443 ssl;
server_name 1.xxx.com; #這里用你的第1個域名
# rewrite ^(.*)$ https://$host$1; #如果需要把http重定向到https,嘗試以下方法
# return 301 https://$host$request_uri; #如果需要把http重定向到https,嘗試以下方法
ssl_certificate /ssl/xxx.com.pem; # xxx.com.pem 這名稱根據實際做修改
ssl_certificate_key /ssl/xxx.com.key; # xxx.com.key 這名稱根據實際做修改
ssl_session_timeout 5m;
# 指定密碼為openssl支持的格式
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on; #依賴SSLv3和TLSv1協議的服務器密碼將優先于客戶端密碼
location / {
proxy_pass http://192.168.1.1:8080; #需要代理的內網主機IP以及8080埠號,根據實際需要做調整
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# 以下就是復制上邊的內容,然后把域名和需要代理的內網主機做修改就可以了
server {
listen 443 ssl;
server_name 2.xxx.com; #這里用你的第2個域名
ssl_certificate /ssl/xxx.com.pem;
ssl_certificate_key /ssl/xxx.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.1.2:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
②創建容器
- 將default.conf 放入主機存盤的目錄,主機目錄:/data/nginx/config/conf.d/
- 將證書放入主機存盤的目錄,主機目錄:/data/nginx/ssl/
docker run --name nginx -p 443:443 -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
容器啟動完成后,在瀏覽器中輸入“https://域名",即可跳轉到所代理的web專案
三、使用nginx代理tcp埠(以redis為例)
1、安裝redis
- 拉取nginx鏡像
[root@localhost ~]# docker pull redis
- 啟動 redis(此處僅做測驗,不做過多操作,生產環境中,建議把資料庫和組態檔掛載出來的)
[root@localhost ~]# docker run -p 6379:6379 -d redis
2、修改nginx.conf 組態檔
- 修改 nginx.conf,將以下一行代碼注釋掉(次處僅演示對tcp埠的轉發功能,所以舍棄了 default.conf 這個組態檔中的內容,如果你有 http 轉發的需求,就根據實際情況做調整)
[root@localhost ~]# vi /data/nginx/config/nginx.conf
# include /etc/nginx/conf.d/*.conf;
- 在nginx.conf末尾處增加代碼段
stream {
upstream redis {
server *主機IP地址或容器地址*:6379;
}
server {
listen 6379;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass redis;
}
}
或通過以下格式增加
stream {
server {
listen 6379;
# 如果需要加證書,就在這個部分添加就可以了,參考上邊ssl證書部分的內容添加即可
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass *主機IP地址或容器地址*:6379;
}
}
3、啟動nginx
- 將nginx的6379埠映射到主機的16379埠,后期可通過次埠方位redis
[root@localhost ~]# docker run --name nginx -p 16379:6379 \
-v /data/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-d nginx:1.21.3
現在就可以通過 redis 的工具軟體進行連接嘗試了
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303280.html
標籤:其他
上一篇:Linux網路服務之DHCP篇
