Linux 部署 Nginx 服務
Nginx介紹
Nginx 是一款輕量級高效能的web伺服器和反向代理伺服器
Nginx的安裝
- 通過yum安裝
- 在保證網路正常,可以訪問網際網路的情況下,配置yum源
- 使用 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
安裝檔案解釋:
- /etc/nginx 目錄下一是一些配置檔案
- /usr/share/nginx 目錄下是一些靜態資原始檔
- /var/log/nginx 下是一些日誌檔案及臨時檔案
- 通過make安裝nginx
- 下載nginx安裝包到Linux
- 建立配置nginx需要的使用者(作為執行nginx的使用者,為了安全,不允許該使用者登入系統)
- 解壓壓縮包並進入nginx目錄
- 由於使用的是編譯安裝,所有需要自己解決軟體的依賴,nginx軟體所需依賴:yum install -y pcre-devel openssl-devel
- 執行配置操作
- 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
配置項解釋:
- - -prefix=/opt/nginx 指定 nginx 的安裝目錄,若目錄不存在,會自動建立
- - -user=www 指定執行 nginx worker 程式的使用者
- - -with-http_ssl_module 開可使用 ssl - https 訪問功能
- - -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 {
# }
# }
}
- 全域性塊:配置影響nginx全域性的指令。一般有執行nginx伺服器的使用者組,nginx程式pid存放路徑,日誌存放路徑,配置檔案引入,允許生成worker process數等。
- events塊:配置影響nginx伺服器或與使用者的網路連線。如每個程式的最大連線數,選取哪種事件驅動模型處理連線請求,是否允許同時接受多個網路連線,開啟多個網路連線序列化等。
- http塊:可以巢狀多個server,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置。如檔案引入,mime-type定義,日誌自定義,是否使用sendfile傳輸檔案,連線超時時間,單連線請求數等。
- server塊:配置虛擬主機的相關引數,一個http中可以有多個server。
- location塊:配置請求的路由,以及各種頁面的處理情況。
- /etc/nginx/conf.d/* 配置檔案
寫在前面
在做以下配置實驗時,建議做以下操作
systemctl stop firewalld
關閉firewalld 防火牆服務,該項會影響瀏覽器訪問網站setenforce 0
關閉SELinux,該項會影響Nginx訪問檔案,提供靜態資源- 修改配置後,若要配置生效,需要重啟服務或者過載配置
nginx -s reload
或systemctl restart nginx
- 基本靜態網站配置
[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>
驗證:
- 若瀏覽器所在主機為Windows,則需要修改C:\Windows\System32\drivers\etc\hosts 檔案,在檔案末尾新增10.0.0.201 www.master.com,前邊是Linux虛擬機器的IP地址,後邊是域名;Windows該檔案為DNS解析檔案,在訪問域名是,系統優先查詢該檔案進行DNS解析,即將域名解析為可路由的IP地址。
- 若瀏覽器所在主機為Linux,則需要修改/etc/hosts/,在檔案末尾新增10.0.0.201 www.master.com。
- 在配置好本地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; # 使用者密碼檔案位置
}
}
效果如圖所示:
- 網站服務狀態監控
- 將網站狀態監控放在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
- access.log 通過的訪問日誌
- 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 可標識使用者瀏覽器,及作業系統
相關文章
- docker初體驗:docker部署nginx服務DockerNginx
- Node.js + Nginx 部署 HTTPS 服務Node.jsNginxHTTP
- Linux-DHCP服務部署Linux
- [Linux]如何給Nginx新增服務LinuxNginx
- nginx的web快取服務環境部署記錄NginxWeb快取
- Windows+Nginx+H3C+ 文件服務 部署配置WindowsNginx
- nginx服務Nginx
- 如何在Linux下部署Samba服務?LinuxSamba
- Nginx代理服務Nginx
- 從 node服務部署,到https配置與nginx轉發HTTPNginx
- Nginx部署前後端分離服務以及配置說明Nginx後端
- NFS服務部署NFS
- Nginx服務系列——代理Nginx
- Nginx靜態服務Nginx
- linux安裝nodejs及服務部署(二)LinuxNodeJS
- linux之frp服務部署(內網穿透)LinuxFRP內網穿透
- Linux雲服務部署Spring boot專案LinuxSpring Boot
- Linux網路服務之部署YUM倉庫Linux
- Linux下玩轉nginx系列(六)---nginx實現cache(快取)服務LinuxNginx快取
- Linux上安裝Nginx依賴環境和庫、Nginx安裝,Nginx服務命令LinuxNginx
- Nginx服務系列——靜態資源web服務NginxWeb
- FTP服務端部署FTP服務端
- Nginx部署HTTPS服務過程與異常處理實踐NginxHTTP
- nginx 服務繫結域名Nginx
- Nginx服務安裝配置Nginx
- 使用 Nginx 搭建 Webdav 服務NginxWeb
- windows 安裝Nginx服務WindowsNginx
- Linux中Vsftpd服務的部署及優化LinuxFTP優化
- Linux下squid代理快取服務環境部署LinuxUI快取
- 如何部署 Docker Registry 服務Docker
- Azure上部署FTP服務FTP
- RHEL 8 搭建 Nginx Web 服務NginxWeb
- Nginx服務詳細介紹Nginx
- Nginx服務系列——負載均衡Nginx負載
- JUPYTER 服務的 NGINX 配置Nginx
- 基於Nginx搭建WebDAV服務NginxWeb
- nginx反向代理多個服務Nginx
- nginx服務企業應用Nginx