Linux 部署 Nginx 服務

R公子發表於2020-09-30

Nginx介紹

Nginx 是一款輕量級高效能的web伺服器和反向代理伺服器

Nginx的安裝

  1. 通過yum安裝
  1. 在保證網路正常,可以訪問網際網路的情況下,配置yum源
  2. 使用 yum 安裝 nginx

使用 yum 命令安裝的nginx服務啟動方式及常用命令:
systemctl start nginx 啟動nginx服務
systemctl stop nginx 停止nginx服務
systemctl restart nginx 重啟nginx服務
systemctl reload nginx 過載nginx配置
nginx -t 檢查nginx服務配置是否正確

具體yum命令可參考 中的【Linux 系統配置命令-軟體安裝命令】

[root@centos7 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@centos7 ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@centos7 ~]# yum install nginx
# 使用rpm -ql nginx 查詢nginx的按照檔案位置
[root@centos ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx-1.16.1
/usr/share/doc/nginx-1.16.1/CHANGES
/usr/share/doc/nginx-1.16.1/README
/usr/share/doc/nginx-1.16.1/README.dynamic
/usr/share/doc/nginx-1.16.1/UPGRADE-NOTES-1.6-to-1.10
/usr/share/licenses/nginx-1.16.1
/usr/share/licenses/nginx-1.16.1/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/en-US
/usr/share/nginx/html/icons
/usr/share/nginx/html/icons/poweredby.png
/usr/share/nginx/html/img
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx

安裝檔案解釋:

  1. /etc/nginx 目錄下一是一些配置檔案
  2. /usr/share/nginx 目錄下是一些靜態資原始檔
  3. /var/log/nginx 下是一些日誌檔案及臨時檔案
  1. 通過make安裝nginx
  1. 下載nginx安裝包到Linux
  2. 建立配置nginx需要的使用者(作為執行nginx的使用者,為了安全,不允許該使用者登入系統)
  3. 解壓壓縮包並進入nginx目錄
  4. 由於使用的是編譯安裝,所有需要自己解決軟體的依賴,nginx軟體所需依賴:yum install -y pcre-devel openssl-devel
  5. 執行配置操作
  6. make編譯及安裝
wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@centos7 ~]# ll
總用量 1016
-rw-r--r-- 1 root root 1039530 4月  21 22:33 nginx-1.18.0.tar.gz
[root@centos7 ~/nginx-1.18.0]# useradd -M -s /sbin/nologin www
[root@centos7 ~/nginx-1.18.0]# id www
uid=1002(www) gid=1002(www)=1002(www)
[root@centos7 ~]# tar xvf nginx-1.18.0.tar.gz
[root@centos7 ~]# ll
總用量 1016
drwxr-xr-x 8 test 1001     158 4月  21 22:09 nginx-1.18.0
-rw-r--r-- 1 root root 1039530 4月  21 22:33 nginx-1.18.0.tar.gz
[root@centos7 ~]# cd nginx-1.18.0/
[root@centos7 ~/nginx-1.18.0]# ll
總用量 760
drwxr-xr-x 6 test 1001    326 9月  29 15:38 auto
-rw-r--r-- 1 test 1001 302863 4月  21 22:09 CHANGES
-rw-r--r-- 1 test 1001 462213 4月  21 22:09 CHANGES.ru
drwxr-xr-x 2 test 1001    168 9月  29 15:38 conf
-rwxr-xr-x 1 test 1001   2502 4月  21 22:09 configure
drwxr-xr-x 4 test 1001     72 9月  29 15:38 contrib
drwxr-xr-x 2 test 1001     40 9月  29 15:38 html
-rw-r--r-- 1 test 1001   1397 4月  21 22:09 LICENSE
drwxr-xr-x 2 test 1001     21 9月  29 15:38 man
-rw-r--r-- 1 test 1001     49 4月  21 22:09 README
drwxr-xr-x 9 test 1001     91 9月  29 15:38 src
[root@centos7 ~/nginx-1.18.0]# yum install -y pcre-devel openssl-devel
[root@centos7 ~/nginx-1.18.0]# ./configure --prefix=/opt/nginx --user=www --with-http_ssl_module --with-http_stub_status_module
[root@centos7 ~/nginx-1.18.0]# make && make install
[root@centos7 ~]# cd /opt/nginx/
[root@centos7 /opt/nginx]# ll
總用量 0
drwx------ 2 www  root   6 9月  29 15:54 client_body_temp
drwxr-xr-x 2 root root 333 9月  29 16:21 conf
drwx------ 2 www  root   6 9月  29 15:54 fastcgi_temp
drwxr-xr-x 2 root root  40 9月  29 15:53 html
drwxr-xr-x 2 root root  41 9月  29 16:31 logs
drwx------ 2 www  root   6 9月  29 15:54 proxy_temp
drwxr-xr-x 2 root root  19 9月  29 15:53 sbin
drwx------ 2 www  root   6 9月  29 15:54 scgi_temp
drwx------ 2 www  root   6 9月  29 15:54 uwsgi_temp

./configure --prefix=/opt/nginx --user=www --with-http_ssl_module --with-http_stub_status_module
配置項解釋:

  1. - -prefix=/opt/nginx 指定 nginx 的安裝目錄,若目錄不存在,會自動建立
  2. - -user=www 指定執行 nginx worker 程式的使用者
  3. - -with-http_ssl_module 開可使用 ssl - https 訪問功能
  4. - -with-http_stub_status_module 開啟 nginx 服務監控功能(必選)

nginx 安裝檔案解釋:
/opt/nginx/log 存放日誌的目錄
/opt/nginx/html 存放 html 程式碼靜態檔案的位置
/opt/nginx/conf 存放配置檔案的位置
/opt/nginx/sbin nginx 可執行檔案位置,可以進入該目錄使用./nginx 來啟動服務

為了可以在系統中任意位置執行命令開啟 nginx,將 nginx 目錄新增到環境變數中:

[root@centos7 ~]# export PATH=$PATH:/opt/nginx/sbin
[root@centos7 ~]# nginx -t
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful

若想永久生效,需要把 export PATH=$PATH:/opt/nginx/sbin 追加寫入到~/.bashrc 中;
若需對所有使用者永久生效,需要寫入到/etc/bashrc中;
然後執行 source ~/.bashrc 或 source /etc/bashrc 立即生效

Nginx的配置

這裡以 yum 安裝的 nginx 為例

  • /etc/nginx/nginx.conf 配置檔案:
[root@centos ~]# cd /etc/nginx/
[root@centos /etc/nginx]# ll
total 68
drwxr-xr-x 2 root root   73 Sep 29 15:18 conf.d
drwxr-xr-x 2 root root    6 Oct  3  2019 default.d
-rw-r--r-- 1 root root 1077 Oct  3  2019 fastcgi.conf
-rw-r--r-- 1 root root 1077 Oct  3  2019 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Oct  3  2019 fastcgi_params
-rw-r--r-- 1 root root 1007 Oct  3  2019 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Oct  3  2019 koi-utf
-rw-r--r-- 1 root root 2223 Oct  3  2019 koi-win
-rw-r--r-- 1 root root 5231 Oct  3  2019 mime.types
-rw-r--r-- 1 root root 5231 Oct  3  2019 mime.types.default
-rw-r--r-- 1 root root 2491 Sep 28 09:40 nginx.conf
-rw-r--r-- 1 root root 2656 Oct  3  2019 nginx.conf.default
-rw-r--r-- 1 root root  636 Oct  3  2019 scgi_params
-rw-r--r-- 1 root root  636 Oct  3  2019 scgi_params.default
-rw-r--r-- 1 root root  664 Oct  3  2019 uwsgi_params
-rw-r--r-- 1 root root  664 Oct  3  2019 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Oct  3  2019 win-utf

先來看 /etc/nginx/nginx.conf 檔案:

[root@centos /etc/nginx]# cat nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

# worker程式使用者
user nginx;    
# worker 程式數量,要根據CPU來配置
worker_processes auto;
# 錯誤日誌
error_log /var/log/nginx/error.log;
# 程式 pid 位置----有時服務啟動有問題可以檢測一些該檔案
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
# 模組配置檔案
include /usr/share/nginx/modules/*.conf;


events {
	# 設定每個worker程式最大連線數
    worker_connections 1024;
}

http {
	# 日誌格式
    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;
    tcp_nodelay         on;
    # 長連線,保持連線超時時間
    keepalive_timeout   65;
    types_hash_max_size 2048;
	
	# 匯入處理檔案型別配置檔案
    include             /etc/nginx/mime.types;
    # 預設處理檔案方式(若在以上/etc/nginx/mime.types檔案中沒有匹配到)
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    # 匯入/etc/nginx/conf.d/下所有的配置檔案,可在/etc/nginx/conf.d/目錄中為不同站點建立配置不同策略的配置檔案
    include /etc/nginx/conf.d/*.conf;
	
	# 站點配置
    server {
    	# IPv4 偵聽埠,客戶端通過該埠訪問nginx服務;default_server預設載入的站點,全域性只能有一個,主要配置
        listen       80 default_server;
        # IPv6 偵聽埠
        listen       [::]:80 default_server;
        # 服務名,多個不同站點,通過該配置進行路由
        server_name  _;
        # 站點根目錄
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        # 匯入預設配置
        include /etc/nginx/default.d/*.conf;
		
		# 頁面配置項,可為不同頁面配置不同的項
        location / {
        }
		
		# 404錯誤頁
        error_page 404 /404.html;
            location = /40x.html {
        }
		
		# 錯誤頁
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# https 配置
# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}
  1. 全域性塊:配置影響nginx全域性的指令。一般有執行nginx伺服器的使用者組,nginx程式pid存放路徑,日誌存放路徑,配置檔案引入,允許生成worker process數等。
  2. events塊:配置影響nginx伺服器或與使用者的網路連線。如每個程式的最大連線數,選取哪種事件驅動模型處理連線請求,是否允許同時接受多個網路連線,開啟多個網路連線序列化等。
  3. http塊:可以巢狀多個server,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置。如檔案引入,mime-type定義,日誌自定義,是否使用sendfile傳輸檔案,連線超時時間,單連線請求數等。
  4. server塊:配置虛擬主機的相關引數,一個http中可以有多個server。
  5. location塊:配置請求的路由,以及各種頁面的處理情況。
  • /etc/nginx/conf.d/* 配置檔案

寫在前面
在做以下配置實驗時,建議做以下操作

  1. systemctl stop firewalld 關閉firewalld 防火牆服務,該項會影響瀏覽器訪問網站
  2. setenforce 0 關閉SELinux,該項會影響Nginx訪問檔案,提供靜態資源
  3. 修改配置後,若要配置生效,需要重啟服務或者過載配置
    nginx -s reloadsystemctl restart nginx
  1. 基本靜態網站配置
[root@centos /etc/nginx/conf.d]# pwd
/etc/nginx/conf.d
# 在該目錄中建立指定檔案,檔名隨意,但是最好是可以標識站點的名稱
[root@centos /etc/nginx/conf.d]# cat www.conf 
# server塊,配置該站點
server {
	# 偵聽80埠,取消預設,否則和/etc/nginx/nginx.conf檔案衝突,或者可以將/etc/nginx/nginx.conf檔案中的server塊配置註釋
    listen       80;
    # 服務名稱,也就是站點名成,當客戶端輸入域名訪問時,nginx會對使用者訪問的站點進行路由,根據該配置查詢對應的站點
    server_name  www.master.com;
    # 站點的根目錄
    root         /var/html/www;
    # 設定首頁檔名稱,當使用者不指定目錄或檔案,直接訪問域名時,返回該頁面
    index        index.html;
}

[root@centos /var/html/www]# pwd
/var/html/www
[root@centos /var/html/www]# ll
total 4
-rw-r--r-- 1 root root 16 Sep 29 19:11 index.html
[root@centos /var/html/www]# cat index.html 
<h1>Master</h1>

驗證:

  1. 若瀏覽器所在主機為Windows,則需要修改C:\Windows\System32\drivers\etc\hosts 檔案,在檔案末尾新增10.0.0.201          www.master.com,前邊是Linux虛擬機器的IP地址,後邊是域名;Windows該檔案為DNS解析檔案,在訪問域名是,系統優先查詢該檔案進行DNS解析,即將域名解析為可路由的IP地址。
  2. 若瀏覽器所在主機為Linux,則需要修改/etc/hosts/,在檔案末尾新增10.0.0.201          www.master.com。
  3. 在配置好本地DNS解析檔案後即可使用瀏覽器訪問對應的域名。

在這裡插入圖片描述
2. 檔案共享網站配置

  • 免密版:
[root@centos /etc/nginx/conf.d]# pwd 
/etc/nginx/conf.d
[root@centos /etc/nginx/conf.d]# cat share.conf 
server {
    listen       80;
    server_name  share.master.com;
    root         /var/html/share/;
    autoindex    on;    # 站點目錄檔案列表索引,實現檔案共享
}

[root@centos /var/html/share]# pwd
/var/html/share
[root@centos /var/html/share]# ll
total 0
drwxr-xr-x 2 root root 23 Sep 29 19:38 test
-rw-r--r-- 1 root root  0 Sep 29 19:38 test.txt

如圖為訪問網站截圖:

在這裡插入圖片描述

  • 訪問地址白名單配置

訪問地址白名單,即配置只有某些IP地址或者IP地址段的客戶端可以訪問網站或網站某頁面

[root@centos /etc/nginx/conf.d]# pwd
/etc/nginx/conf.d
[root@centos /etc/nginx/conf.d]# cat share.conf 
server {
    listen       80;
    server_name  share.master.com;
    root         /var/html/share/;
    autoindex    on;
    allow        10.0.0.2;    # 允許訪問的客戶端地址
    deny         all;         # 拒絕訪問的客戶端地址,all表示全部
}

客戶端地址為10.0.0.1,訪問被拒絕
在這裡插入圖片描述

使用location塊來配置只允許10.0.0.2的地址訪問test目錄

[root@centos /etc/nginx/conf.d]# cat share.conf 
server {
    listen       80;
    server_name  share.master.com;
    root         /var/html/share/;
    autoindex    on;
    location /test/ {     # 配置/test/ 目錄,只有10.0.0.2才可以訪問
        allow        10.0.0.2;
        deny         all;
    }
}

訪問首頁可以,但是進入test目錄時被拒絕
在這裡插入圖片描述

  • 登入驗證版

若要登入驗證,需要用到使用者名稱和密碼,這個需要一個工具htpasswd來向檔案中寫入使用者名稱及密碼
yum install httpd-tools 安裝工具包

[root@centos /etc/nginx]# pwd
/etc/nginx
# htpasswd -c 引數建立passwd.txt 檔案並新增test使用者
[root@centos /etc/nginx]# htpasswd -c passwd.txt test
New password: 
Re-type new password: 
Adding password for user test
[root@centos /etc/nginx]# ll passwd.txt 
-rw-r--r-- 1 root root 43 Sep 29 20:09 passwd.txt
[root@centos /etc/nginx]# cat passwd.txt 
test:$apr1$wE5Q1Bxc$EMe5kvH4b6nG7bAi2xqbq.
# 再次向passwd.txt 中新增使用者
[root@centos /etc/nginx]# htpasswd passwd.txt user
New password: 
Re-type new password: 
Adding password for user user
[root@centos /etc/nginx]# cat passwd.txt 
test:$apr1$wE5Q1Bxc$EMe5kvH4b6nG7bAi2xqbq.
user:$apr1$Tte5F1Gb$pkakogJe38e94f5xwrohS/

安裝好htpasswd工具並建立使用者密碼檔案後,需要修改配置檔案,開啟使用者身份驗證功能,並指定使用者密碼檔案

# 本例只做限制某目錄訪問驗證
[root@centos /etc/nginx/conf.d]# pwd
/etc/nginx/conf.d
[root@centos /etc/nginx/conf.d]# cat share.conf 
server {
    listen       80;
    server_name  share.master.com;
    root         /var/html/share/;
    autoindex    on;
    location /test/ {
        auth_basic    "test dir auth login";    # 驗證說明,是用來做test目錄登入驗證的
        auth_basic_user_file   /etc/nginx/passwd.txt;   # 使用者密碼檔案位置
    }
}

效果如圖所示:
在這裡插入圖片描述
在這裡插入圖片描述

  • 網站服務狀態監控
  1. 將網站狀態監控放在sever塊上
[root@centos /etc/nginx/conf.d]# pwd 
/etc/nginx/conf.d
[root@centos /etc/nginx/conf.d]# cat www.conf 
server {
    listen       80;
    server_name  www.master.com;
    root         /var/html/www;
    index        index.html;
    stub_status; 
}
[root@centos /var/html/www]# tree
.
├── a
│   └── a.html
└── index.html

1 directory, 2 files

可以看到,當訪問其他目錄中的頁面時,頁面顯示也是網站狀態資訊
在這裡插入圖片描述
2. 對指定目錄配置網站狀態監控

[root@centos /etc/nginx/conf.d]# pwd
/etc/nginx/conf.d
[root@centos /etc/nginx/conf.d]# cat www.conf 
server {
    listen       80;
    server_name  www.master.com;
    root         /var/html/www;
    index        index.html;
    location /status/ {
        stub_status; 
    }
}
# 根據以上配置,需要載www.master.com的站點目錄下建立status目錄
[root@centos /var/html/www]# pwd
/var/html/www
[root@centos /var/html/www]# mkdir status
[root@centos /var/html/www]# ll
total 4
drwxr-xr-x 2 root root 20 Sep 29 20:25 a
-rw-r--r-- 1 root root 16 Sep 29 19:11 index.html
drwxr-xr-x 2 root root  6 Sep 29 20:32 status

訪問站點如下圖,當訪問status目錄時顯示網站狀態資訊,其他頁面訪問正常
在這裡插入圖片描述

網站狀態資訊說明
# 網站活動的連線數,可以通過 netstat -pantu | grep nginx 檢視 ESTABLISHED狀態的連線數
Active connections: 2
accepts:建立連線的總數
handled:處理連線的總數
requests:請求包總的數量
server accepts handled requests
               47           47         96
Reading: 0 Writing: 1 Waiting: 1

Nginx的日誌

yum 安裝的 nginx 日誌檔案位置為 /etc/log/nginx

  1. access.log 通過的訪問日誌
  2. error.log 錯誤日誌
[root@centos /var/log/nginx]# cat access.log
10.0.0.1 - test [29/Sep/2020:20:40:12 +0800] "GET /test/ HTTP/1.1" 200 271 "http://share.master.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.63" "-"
   ①        ②               ③                           ④           ⑤               ⑥                             ⑦

該日誌格式對應 /etc/nginx/nginx.conf 中配置的日誌格式
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;
① 客戶端訪問IP地址
② 若為登入認證版,該項為登入使用者名稱,否則為 -
③ 請求時間
④ 請求頭
⑤ 響應狀態
⑥ Referer 客戶是從哪個頁面跳轉過來的訪問該頁面的
⑦ User-Agent 可標識使用者瀏覽器,及作業系統

相關文章