非常適合開發學習的Nginx教程

引言:

現如今作為一名Java開發工程師,不會點運維相關的技術都不好意思出去面試,本文是從0開始基于Docker搭建的Nginx,實現了Nginx的基本使用 (前提是需要懂一點Docker基本操作)非常適合做開發的同學參考,原創不易,文章中如有不對的地方,歡迎各位大佬指正...

備注:本文中 192.168.235.142 是我的服務器ip,mynginx.conf 是我自定義的Nginx的核心配置文件

1、Nginx解決了什么問題

1.1 客戶端不用關心將請求發送到哪臺服務器,只要記住Nginx的地址即可
2.1 如果客戶端發送的請求是靜態資源,不用服務器處理,就可以直接訪問Nginx,節約服務器資源

image.png
image.png

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/ )

image.png

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)

正向代理:代理服務器在客戶端配置

image.png

反向代理:代理服務器在服務器配置

image.png

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的頁面

image.png
image.png

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;
    #}

}

在宿主機上新建文件夾和頁面,圖片,如下:

image.png

通過路徑 http://192.168.235.142/html/ 可以訪問自定義的頁面
通過路徑 http://192.168.235.142/img/可以訪問圖片

image.png

10、Nginx集群

10.1 準備多臺Nginx
10.2 每臺Nginx配備keepalived,監聽Nginx的健康狀態
10.3 搭建Haproxy,提供一個虛擬路徑,統一接收用戶的請求

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容