nginx之旅(第一篇):nginx下載安裝、nginx啟動與關閉、nginx配置文件詳解、nginx默認網站


一、nginx下載安裝

版本nginx 1.15.5

系統環境centos7.5(本機ip192.168.199.228)

關閉selinux 和防火牆firewall

 

1、下載

wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src

 

2、安裝

安裝大概過程

配置---編譯---安裝

配置 1)檢查環境 是否 滿足安裝條件 依賴解決 2)指定安裝方式 配置文件 命令文件 各種文件放哪里 開啟模塊功能【內 置模塊 三方模塊】 3)指定軟件安裝在那里

 

a、切換到usr/src目錄,解壓文件

[root@localhost src]# cd /usr/src
[root@localhost src]# ls
debug  kernels  nginx-1.15.5.tar.gz
[root@localhost src]# tar xf nginx-1.15.5.tar.gz 
[root@localhost src]# ls
debug  kernels  nginx-1.15.5  nginx-1.15.5.tar.gz
[root@localhost src]# 

  

查看配置方法

[root@localhost src]# pwd
/usr/src
[root@localhost src]# cd nginx-1.15.5
[root@localhost nginx-1.15.5]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@localhost nginx-1.15.5]# ./configure --help  #查看配置參數幫助

  


b、安裝各種依賴環境

[root@localhost src]# cd nginx-1.15.5
[root@localhost nginx-1.15.5]# yum -y install gcc pcre-devel zlib zlib-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.vpshosting.com.hk
 * extras: centos.01link.hk
 * updates: hk.mirrors.thegigabit.com
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-39.el7 will be installed
...

  

gcc 編譯工具

pcre-devel 在nginx中url 需要用到這個包

zlib zlib-devel 解壓縮工具

 對於 gcc,因為安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境的話,需要安裝gcc。

  對於 pcre,prce(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。

  對於 zlib,zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。

 

c、指定目錄進行編譯

[root@localhost nginx-1.15.5]# ./configure --prefix=/usr/local/nginx
checking for OS
 + Linux 3.10.0-862.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
 ...

  

 

d、編譯make

make就是將源碼進行編譯生成可執行程序的過程

[root@localhost nginx-1.15.5]# pwd
/usr/src/nginx-1.15.5
[root@localhost nginx-1.15.5]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@localhost nginx-1.15.5]# make
make -f objs/Makefile
make[1]: Entering directory `/usr/src/nginx-1.15.5'
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
...

  

沒有error的話進行

e、make install完成安裝

[root@localhost nginx-1.15.5]# make install
make -f objs/Makefile install
make[1]: Entering directory `/usr/src/nginx-1.15.5'
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
test -d '/usr/local/nginx/sbin' \
...

  

完成安裝

二、nginx的相關目錄

nginx path prefix: "/usr/local/nginx"  #nginx的安裝目錄
nginx binary file: "/usr/local/nginx/sbin/nginx" #nginx的啟動文件
nginx modules path: "/usr/local/nginx/modules" # nginx的模塊目錄
nginx configuration prefix: "/usr/local/nginx/conf" #nginx的配置文件位置
nginx configuration file: "/usr/local/nginx/conf/nginx.conf" #nginx的配置文件全路徑
nginx pid file: "/usr/local/nginx/logs/nginx.pid" #nginx的進程號
nginx error log file: "/usr/local/nginx/logs/error.log" #nginx的錯誤日志目錄
nginx http access log file: "/usr/local/nginx/logs/access.log" #nginx的訪問日志目錄
 

  

三、nginx的啟動與關閉、檢查配置文件

查看端口是否占用

方法一

安裝netstat 用netstat進行查看

[root@localhost nginx]# yum -y install net-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
...
​
​
[root@localhost nginx]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      881/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1128/master         
tcp6       0      0 :::22                   :::*                    LISTEN      881/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1128/master         
​

  


方法二

安裝lsof 用lsof 查看

[root@localhost nginx]# yum -y install lsof
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
...
​
[root@localhost nginx]# lsof -i :80
[root@localhost nginx]#   
#沒有顯示結果表示端口沒有被占用

  

啟動nginx方式

[root@localhost nginx]# lsof -i :80
[root@localhost nginx]# /usr/local/nginx/sbin/nginx  #啟動nginx
[root@localhost nginx]# lsof -i :80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   11728   root    6u  IPv4  38674      0t0  TCP *:http (LISTEN)
nginx   11729 nobody    6u  IPv4  38674      0t0  TCP *:http (LISTEN)
[root@localhost nginx]# #nginx把80端口占用了

  

 

 

查看是否安裝成功

方法一:

用google瀏覽器地址欄輸入http://192.168.199.228(nginx安裝服務器的ip地址)

如果出現Welcome to nginx!頁面則安裝成功

方法二

用elinks 查看安裝是否成功,elinks不會有緩存,一般的google瀏覽器會有緩存

[root@localhost nginx]# yum -y install elinks
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.vpshosting.com.hk
 * extras: centos.01link.hk
 * updates: hk.mirrors.thegigabit.com
...
​
[root@localhost nginx]# elinks http://192.168.199.228 --dump
                               Welcome to nginx!
​
   If you see this page, the nginx web server is successfully installed and
   working. Further configuration is required.
​
   For online documentation and support please refer to [1]nginx.org.
   Commercial support is available at [2]nginx.com.
​
   Thank you for using nginx.
​
References
​
   Visible links
   1. http://nginx.org/
   2. http://nginx.com/
[root@localhost nginx]# 

  


 

關閉 nginx

  有3種方式:

  方式1:快速停止

 cd /usr/local/nginx/sbin
 ./nginx -s stop

  

  此方式相當於先查出nginx進程id再使用kill命令強制殺掉進程。不太友好。

 

  方式2:平緩停止

 cd /usr/local/nginx/sbin
 ./nginx -s quit

  

  此方式是指允許 nginx 服務將當前正在處理的網絡請求處理完成,但不在接收新的請求,之后關閉連接,停止工作。

方法3:killall

killall nginx

  

  相當於直接殺死所有的關於nginx的進程

 

重啟 nginx

  方式1:先停止再啟動

 ./nginx -s quit
 ./nginx

  

  相當於先執行停止命令再執行啟動命令。

  方式2:重新加載配置文件

./nginx -s reload

  

 

  通常我們使用nginx修改最多的便是其配置文件 nginx.conf。修改之后想要讓配置文件生效而不用重啟 nginx,便可以使用此命令。

  方法3:

  

killall -s HUP nginx

  

  檢測配置文件語法是否正確

  方式1:通過如下命令,指定需要檢查的配置文件

nginx -t -c  /usr/local/nginx/conf/nginx.conf

  

  方式2:通過如下命令,不加 -c 參數,默認檢測nginx.conf 配置文件。

nginx -t 

  

 

四、Nginx配置文件詳解

nginx文件結構

...              #全局塊
​
events {         #events塊
   ...
}
​
http      #http塊
{
    ...   #http全局塊
    server        #server塊
    { 
        ...       #server全局塊
        location [PATTERN]   #location塊
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局塊
}

  

1、全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數等。

2、events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。

3、http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。

4、server塊:配置虛擬主機的相關參數,一個http中可以有多個server。

5、location塊:配置請求的路由,以及各種頁面的處理情況

  該指令用於匹配 URL。

  語法如下:

 location [ = | ~ | ~* | ^~] uri {
 
 }

  

  (1)= :用於不含正則表達式的 uri 前,要求請求字符串與 uri 嚴格匹配,如果匹配成功,就停止繼續向下搜索並立即處理該請求。

  (2)~:用於表示 uri 包含正則表達式,並且區分大小寫。

  (3)~*:用於表示 uri 包含正則表達式,並且不區分大小寫。

  (4)^~:用於不含正則表達式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字符串匹配度最高的 location 后,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字符串做匹配。

  注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~* 標識。

 

location匹配規則補充

語法規則: 【= | ^~ | ~ | ~* | / | /uri 】
 location = /uri                = 表示精確匹配,只有完全匹配上才能生效,若找到,停止搜索; 
 location ^~ /uri               ^~開頭表示對URL路徑進行前綴匹配,並且在正則匹配之前,若找到,停止搜索; 
 location ~ pattern             ~開頭表示區分大小寫的正則匹配,按配置文件順序匹配; 
 location ~* pattern            ~*開頭表示不區分大小寫的正則匹配,按配置文件順序匹配; 
 location /uri                  不帶任何修飾符,表示前綴匹配,在正則匹配之后; 
 location /                     通用匹配,任何未匹配到其他location的請求都會匹配到,相當於default; 
 
 
多個location配置的情況匹配順序為
首先精確匹配 = ;
其次前綴匹配 ^~;
其次是按照配置文件中的正則匹配; 
然后匹配不帶任何修飾符的前綴匹配; 
最后交給/通用匹配;

  

 

示例

location支持的語法優先級:


location匹配順序

#  www.abc.com/
1.location = / {
  我是代碼1
} 精確匹配


# www.abc.com/images/
2.location ^~ /images/ {
我是代碼2
}  匹配常規串,不做正則檢查


#  www.abc.com/xxx.gif  
#www.abc.com/xxx.jpg 
#www.abc.com/xxx.gif
#www.abc.com/xxx.jpeg

3.location ~* \.(gif|jpg|jpeg) {
我是代碼3
} 正則匹配


#優先級為4,  www.abc.com/doc/xx資源
4. location /doc/ {
我是代碼4
}  匹配常規字符,有正則優先正則



#如果你誰都沒匹配到的話,默認走/,走網頁根目錄,優先級最低

5.location / {
我是代碼5
}  所有的location都不匹配后,默認匹配

  

 

Nginx配置文件位置/usr/local/nginx/conf/nginx.conf

詳解一
[root@localhost conf]# vi nginx.conf
​
#啟動該程序的默認用戶
#user  nobody;
#一個主進程和多個工作進程。工作進程是單進程的,且不需要特殊授權即可運行;這里定義的是工作進程數量
worker_processes  4;
​
#全局錯誤日志的位置及日志格式
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
​
#pid        logs/nginx.pid;
​
​
events {
    #每個工作進程最大的並發數,設置的工作進程數*每個進程允許的最多線程數就是最大並發數
    worker_connections  1024;
​
#http服務器設置
http {
     #設定mime類型,類型由mime.type文件定義
    include       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"';
    #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
    #$remote_user:用來記錄客戶端用戶名稱;
    #$time_local: 用來記錄訪問時間與時區;
    #$request: 用來記錄請求的url與http協議;
    #$status: 用來記錄請求狀態;成功是200,
    #$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
    #$http_referer:用來記錄從那個頁面鏈接訪問過來的;
    #$http_user_agent:記錄客戶瀏覽器的相關信息;
    
​
    #全局訪問日志路徑
    #access_log  logs/access.log  main;
    
    #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設為on。如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡IO處理速度,降低系統uptime。
    sendfile        on;
    
    #此選項允許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用
    #tcp_nopush     on;
    
    #長連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    
    #開啟壓縮
    #gzip  on;
    
    #配置虛擬主機
    server {
        #虛擬主機使用的端口
        listen       80;
        
        #虛擬主機域名
        server_name  localhost;
​
        #虛擬主機支持的字符集
        #charset koi8-r;
​
        #虛擬主機的訪問日志路徑
        #access_log  logs/host.access.log  main;
​
        #定義web根路徑
        location / {
            #根目錄路徑
            root   html;
            #索引頁
            index  index.html index.htm;
        }
        
        #404頁面配置
        #error_page  404              /404.html;
​
        # redirect server error pages to the static page /50x.html
        #
        #根據錯誤碼 返回對應的頁面
        error_page   500 502 503 504  /50x.html;
        #定義頁面路徑
        location = /50x.html {
            root   html;
        }
        
        #定義反向代理服務器 數據服務器是lamp模型
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        
        #定義PHP為本機服務的模型  
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
​
​
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
​
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
​
    
    #https的配置方案
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
​
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
​
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
​
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
​
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
​
}
​
 

  

 

詳解二

########### 每個指令必須有分號結束。#################
#user administrator administrators;  #配置用戶或者組,默認為nobody nobody。
#worker_processes 2;  #允許生成的進程數,默認為1
#pid /nginx/pid/nginx.pid;   #指定nginx進程運行文件存放地址
error_log log/error.log debug;  #制定日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #設置網路連接序列化,防止驚群現象發生,默認為on
    multi_accept on;  #設置一個進程是否同時接受多個網絡連接,默認為off
    #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大連接數,默認為512
}
http {
    include       mime.types;   #文件擴展名與文件類型映射表
    default_type  application/octet-stream; #默認文件類型,默認為text/plain
    #access_log off; #取消服務日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
    access_log log/access.log myFormat;  #combined為日志格式的默認值
    sendfile on;   #允許sendfile方式傳輸文件,默認為off,可以在http塊,server塊,location塊。
    sendfile_max_chunk 100k;  #每個進程每次調用傳輸數量不能大於設定的值,默認為0,即不設上限。
    keepalive_timeout 65;  #連接超時時間,默認為75s,可以在http,server,location塊。
​
    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #熱備
    }
    error_page 404 https://www.baidu.com; #錯誤頁
    server {
        keepalive_requests 120; #單連接請求上限次數。
        listen       4545;   #監聽端口
        server_name  127.0.0.1;   #監聽地址       
        location  ~*^.+$ {       #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。
           #root path;  #根目錄
           #index vv.txt;  #設置默認頁
           proxy_pass  http://mysvr;  #請求轉向mysvr 定義的服務器列表
           deny 127.0.0.1;  #拒絕的ip
           allow 172.18.5.54; #允許的ip           
        } 
    }
}

  

上面是nginx的基本配置,需要注意的有以下幾點:

1、1.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址; 2.$remote_user :用來記錄客戶端用戶名稱; 3.$time_local : 用來記錄訪問時間與時區;4.$request : 用來記錄請求的url與http協議;

5.$status : 用來記錄請求狀態;成功是200, 6.$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;7.$http_referer :用來記錄從那個頁面鏈接訪問過來的; 8.$http_user_agent :記錄客戶端瀏覽器的相關信息;

2、驚群現象:一個網路連接到來,多個睡眠的進程被同事叫醒,但只有一個進程能獲得鏈接,這樣會影響系統性能。

3、每個指令必須有分號結束。

4、修改user 時要用useradd 添加用戶,創建一個不能從終端登錄的名字為webuser的系統用戶

[root@localhost conf]# useradd -s /sbin/nologin -r webuser

  

 

五、nginx的默認網站

當Nginx配置文件中有且只有一個Server的時候,該Server就被Nginx認為是默認網站,所有發給Nginx服務器器80端口的數據都會默認給該Server.

默認網站設置


    server {
        listen       80;
        server_name  localhost;
​
        #charset koi8-r;
​
        #access_log  logs/host.access.log  main;
​
        location / {
            root   html;
            index  index.html index.htm;
        }
​
        #error_page  404              /404.html;
​
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
​
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
​
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    include        fastcgi_params;
        #}
​
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
​

  


nginx默認網站的訪問控制

創建環境,在html文件夾里創建abc三個文件分別寫入index.html

[root@localhost html]# ls
50x.html  index.html
[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# mkdir a b c
[root@localhost html]# ls
50x.html  a  b  c  index.html
[root@localhost html]# echo aaa >a/index.html
[root@localhost html]# echo bbb >b/index.html
[root@localhost html]# echo ccc >c/index.html
[root@localhost html]# ls a/
index.html
[root@localhost html]# cat a/index.html 
aaa
[root@localhost html]# ls
50x.html  a  b  c  index.html
[root@localhost html]# elinks http://192.168.199.228/a --dump  #本機訪問測試
   aaa
​

  


用例1 :ip控制

針對a文件夾只允許本機訪問,拒絕其他所有人訪問

設置修改nginx配置文件,本機ip192.168.199.228

[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# vi ../conf/nginx.conf
...
http{
...
​
server{
        listen       80;
        server_name  localhost;
​
        #charset koi8-r;
        charset utf-8;
​
        #access_log  logs/host.access.log  main;
​
        location / {
            root   html;
            index  index.html index.htm;
        };
        #location / 這里的/代表網站的根目錄
        
        #針對a文件夾進行設置;
        location /a {
            allow   127.0.0.1;
            allow   192.168.199.228;
            deny   all;
            #return 404;
            #return http://www.jd.com;
            #可以返回指定錯誤頁,也可以進行url跳轉,注意這里的返回是訪問成功和不成功的都返回
        }
      
    
}

  

allowdeny會按照順序, 從上往下, 找到第一個匹配規則, 判斷是否允許訪問, 所以一般把all放最后。

其他例子

    deny  192.168.1.1;
  allow 192.168.1.0/24;
  allow 10.1.1.0/16;
  allow 2001:0db8::/32;
  deny all;

 

測試修改后的配置文件是否有誤

[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# ../sbin/nginx -g ../conf/nginx.conf
nginx: [emerg] unexpected end of parameter, expecting ";" in command line
[root@localhost html]# 

  


修改完后方法一:修改完配置一定要檢測Nginx配置是否正確,正確后再重新軟加載配置文件

[root@localhost html]# ../sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost html]#  ../sbin/nginx -s reload

  


修改完后方法二:不再直接kill后再重啟,直接重新加載nginx的配置文件

[root@localhost html]# killall -s HUP nginx
[root@localhost html]# elinks http://192.168.199.228/a --dump
   aaa
​

  

 

用例2:登錄驗證

針對b文件夾,任何人都可以訪問,但是需要憑用戶密碼進行驗證

設置修改nginx配置文件,本機ip192.168.199.228

 

[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# vi ../conf/nginx.conf
...
http{
...
​
server{
        listen       80;
        server_name  localhost;
​
        #charset koi8-r;
        charset utf-8;
​
        #access_log  logs/host.access.log  main;
​
        location / {
            root   html;
            index  index.html index.htm;
        };
        #location / 這里的/代表網站的根目錄
        
        #針對a文件夾進行設置;
        location /a {
            allow   127.0.0.1;
            allow   192.168.199.228;
            deny   all;
            #return 404;
            #return http://www.jd.com;
            #可以返回指定錯誤頁,也可以進行url跳轉,注意這里的返回是訪問成功和不成功的都返回
        }
        
        #針對b文件夾進行設置;
        location /b {
            auth_basic ”登陸驗證test";
            auth_basic_user_file /etc/nginx/htpasswd;
            #auth_basic_user_file 用來存儲用戶認證信息的文件;
        }
      
    
}

  

語法講解: auth_basic 默認關閉,開啟的話輸入一段字符串即可。 auth_basic_user_file 該文件存儲用戶賬號密碼。

 

安裝httpd-tools使用htpasswd工具生成認證信息文件放置在上面設置的位置

[root@localhost html]# yum -y install httpd-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: hk.mirrors.thegigabit.com
 * extras: hk.mirrors.thegigabit.com
 * updates: hk.mirrors.thegigabit.com
...
​
​
[root@localhost html]# mkdir /etc/nginx
[root@localhost html]# htpasswd -c /etc/nginx/htpasswd user1 
#創建文件htpasswd並將新用戶user1和加密的密碼寫入文件到/etc/nginx/目錄下
New password: 
Re-type new password: 
Adding password for user user1  
[root@localhost html]# htpasswd -m /etc/nginx/htpasswd user2
#如果htpasswd文件已經存在則使用-m參數添加新用戶賬戶密碼
New password: 
Re-type new password: 
Adding password for user user2
[root@localhost html]# cat /etc/nginx/htpasswd
user1:$apr1$C8hzuJ.t$z8ZI/y4HgrbrhnmC1QkTp/
user2:$apr1$5LB3P1Wj$HxyEELRZ3vDogTGM3xR2E.
[root@localhost html]# 

  

重新加載配置文件驗證效果

[root@localhost html]# killall -s HUP nginx
[root@localhost html]# 

  


 

 

 

參考鏈接

[1]https://www.cnblogs.com/knowledgesea/p/5175711.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM