引言:
現如今作為一名Java開發工程師,不會點運維相關的技術都不好意思出去面試,本文是從0開始基于Docker搭建的Nginx,實現了Nginx的基本使用 (前提是需要懂一點Docker基本操作)非常適合做開發的同學參考,原創不易,文章中如有不對的地方,歡迎各位大佬指正...
備注:本文中 192.168.235.142 是我的服務器ip,mynginx.conf 是我自定義的Nginx的核心配置文件
1、Nginx解決了什么問題
1.1 客戶端不用關心將請求發送到哪臺服務器,只要記住Nginx的地址即可
2.1 如果客戶端發送的請求是靜態資源,不用服務器處理,就可以直接訪問Nginx,節約服務器資源
2、Nginx的特點
2.1 穩定性強,可以7*24小時不間斷運行
2.2 占用內存小,并發能力強(tomcat默認線程數150個,即默認支持150個并發,但Nginx輕松配置就可以支持5萬+并發)
2.3 提供豐富的配置實例
3、Nginx的主要功能
3.1 反向代理
3.2 負載均衡
3.3 動靜分離
4、Docker安裝Nginx
4.1 新建一個 docker-compose.yml 文件(注意縮進),yml文件位置可以自定義,比如我是放在 /opt/docker-nginx/ 文件夾下面,內容如下:
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:1.13.0-alpine
container_name: nginx
ports:
- 80:80
4.2 通過 docker-compose up –d 后臺啟動Nginx服務
4.3 瀏覽器通過 http://192.168.235.142:80 訪問Nginx,看到Nginx的歡迎頁面就ok。注意:192.168.235.142 是本人服務器的ip
4.4 注意:上面配置項中image:daocloud.io/library/nginx:1.13.0-alpine
需要在daocloud網站(https://hub.daocloud.io/
)找到Nginx的鏡像地址
5、Nginx的主配置文件詳解
5.1 通過 docker exec -it 容器id sh(或者bash) 進入容器內部,查看 nginx.conf 主配置文件(一般Nginx的安裝路徑是 /etc/nginx/ )
nginx.conf 主配置文件內容如下:
#全局配置 worker_processes 和 worker_connections 的值配置的越大,支持的并發越高(一般需要運維去修改)
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
#event配置
events {
worker_connections 1024;
}
#請求配置
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#核心配置
include /etc/nginx/conf.d/*.conf;
}
5.2 進入 /etc/nginx/conf.d 文件夾,發現有一個 default.conf 文件,通過 nginx.conf 可以看出核心配置文件都在 conf.d 文件夾下(Nginx的歡迎頁面就是加載的 default.conf 這個配置文件),所以以后自定義的配置文件都放在這。刪除多余注釋后,配置文件內容如下:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
6、修改Nginx容器的啟動文件 docker-compose.yml
修改 docker-compose.yml 文件(為了添加宿主機和容器內部的路徑映射),在宿主機添加Nginx的配置文件(/conf.d文件夾下新建mynginx.conf文件),并重新構建鏡像
1 停止容器 docker-compose down
2 修改 docker-compose.yml 文件
version: '3.1'
services:
nginx:
restart: always
image: daocloud.io/library/nginx:1.13.0-alpine
container_name: nginx
ports:
- 80:80
volumes:
- /opt/docker_nginx/conf.d/:/etc/nginx/conf.d
3 重新構建鏡像 docker-compose build
4 啟動鏡像 docker-compose up –d
5 此時重啟容器后發現宿主機中已經生成了/opt/docker_nginx/conf.d/ 文件夾,進入文件夾,并新建配置文件,比如: mynginx.conf
7、正向代理與反向代理 (通過Nginx訪問tomcat)
正向代理:代理服務器在客戶端配置
反向代理:代理服務器在服務器配置
7.1 啟動一個tomcat服務,直接訪問頁面ok
通過docker-compose.yml文件分別啟動tomcat7和tomcat8兩個容器,配置文件分別如下:
version: '3.1'
services:
tomcat:
restart: always
image: daocloud.io/library/tomcat:7.0.56
container_name: tomcat7
ports:
- 8081:8080
version: '3.1'
services:
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.0.21
container_name: tomcat8
ports:
- 8082:8080
7.2 分別訪問兩個tomcat頁面都ok : http://192.168.235.142:8081/,http://192.168.235.142:8082/
7.3 修改 mynginx.conf 文件如下后就可以通過 http://192.168.235.142:80/ ,直接通過Nginx訪問tomcat
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.235.142:8081/;
}
}
8、負載均衡策略
8.1 輪訓:平均分配請求數 (默認策略)
8.2 權重:根據權重值按比例分配請求數
8.3 ip_hash:根據客戶端ip進行hash計算后發送到指定的服務器
上面已經啟動了兩臺tomcat,修改 mynginx.conf 配置文件后即可測試負載均衡
upstream my-tomcat{
server 192.168.235.142:8081;
server 192.168.235.142:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my-tomcat/;
}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
}
不斷訪問 192.168.235.142:80 ,可以看到輪訓訪問兩個tomact的頁面
9、動靜分離
9.1 并發計算公式:并發能力 = worker_processes * worker_connections / 4 / 2
9.2 修改 mynginx.conf,配置靜態資源的路徑
server {
listen 80;
server_name localhost;
#頁面配置
location /html {
root /data;
index index.html;
}
#圖片配置
location /img {
root /data;
autoindex on; #開啟后可以在頁面查看文件列表
}
#location / {
# proxy_pass http://my-tomcat/;
#}
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
}
在宿主機上新建文件夾和頁面,圖片,如下:
通過路徑 http://192.168.235.142/html/ 可以訪問自定義的頁面
通過路徑 http://192.168.235.142/img/可以訪問圖片
10、Nginx集群
10.1 準備多臺Nginx
10.2 每臺Nginx配備keepalived,監聽Nginx的健康狀態
10.3 搭建Haproxy,提供一個虛擬路徑,統一接收用戶的請求