Nginx執行控制虛擬主機和訪問控制
目錄
一、Nginx服務概述
一款高效能、輕量級Web服務軟體
- 穩定性高
- 系統資源消耗低
- 對HTTP併發連線的處理能力高
單臺物理伺服器可支援30 000 ~ 50000個併發請求 - 佔用記憶體少,併發能力強
二、Nginx安裝
1.解壓跨平臺元件包和原始碼包
將跨平臺元件包移動到原始碼包/opt目錄下
nginx-1.12.2.tar.gz
[root@server ~]# cd /opt
[root@server opt]# tar xzvf nginx-1.12.2.tar.gz
2.安裝編譯器和其他工具
[root@server opt]# yum -y install gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl \
zlib-devel \
pcre
3.configure配置
[root@server opt]# cd nginx-1.12.2
[root@server nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
4.編譯安裝
[root@server ~]# make && make install
為了使Nginx伺服器的執行更加方便,可以為主程式nginx建立連結檔案,以便管理員直接執行“nginx”命令就可以呼叫Nginx的主程式
[root@server ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
6.建立執行使用者,組
[root@server ~]# useradd -M -s /sbin/nologin nginx
7.開啟nginx,關閉防火牆
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# nginx
[root@localhost ~]# netstat -ntap |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5396/nginx: master
tcp 0 0 192.168.197.192:56680 192.168.100.3:445 ESTABLISHED
三、Nginx的執行控制
檢查配置檔案
[root@localhost ~]# nginx -t //配置檔案語法檢查
啟動,停止Nginx
[root@localhost ~]# nginx //啟動服務
[root@localhost ~]# killall -1 nginx //安全重啟 killall -s HUP nginx
[root@localhost ~]# killall -3 nginx //停止服務 killall -s QUIT nginx
使用Nginx服務指令碼
為了使Nginx服務的啟動,停止,過載等操作更加方便,可以編寫Nginx服務指令碼,並使用chkconfig和service工具來進行管理,也更加符合RHEL系統的管理習慣。
[root@localhost ~]# vi /etc/init.d/nginx
#!/bin/bash
# chkconfig: 35 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|relad}"
exit 1
esac
exit 0
[root@localhost ~]# chmod +x /etc/init.d/nginx
[root@localhost ~]# chkconfig --add nginx
[root@localhost ~]# chkconfig --level 35 nginx on
這樣一來,就可以通過Nginx指令碼來啟動,停止,重啟,過載Nginx伺服器了,方法是在執行時新增相應的start,stop,restart,reload引數。
四、配置檔案nginx.conf
在Nginx伺服器的主配置檔案/usr/local/nginx/conf/nginx.conf中,包括全域性配置,I/O事件配置和HTTP配置這三大塊內容,配置語句的格式為“關鍵字 值;”(末尾以分號表示結束),以“#”開始的部分表示註釋
1.全域性配置
由各種配置語句組成,不使用特定的界定標記,全域性配置部分包括Nginx服務的執行使用者,工作程式數,錯誤日誌,PID存放位置等基本設定。
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
#user nobody; //執行使用者
worker_processes 1; //工作程式數
#error_log logs/error.log; //錯誤日誌檔案的位置
#pid logs/nginx.pid; //PID檔案的位置
上述配置中,worker_processes表示工作程式數。若伺服器有多塊CPU或者使用多核處理器,可以參考CPU核心總數來指定工作程式數,如設為8;如果網站訪問量需求不大,一般設為1就夠用了。其他三項均已有註釋,表示採用預設設定,例如,Nginx的執行使用者實際是編譯時指定的nginx,若編譯時未指定則預設為nobody。
2.I/O事件配置
使用“events{ }” 界定標記,用來指定Nginx程式的I/O響應模型,每個程式的連線數等設定。對於2.6及以上版本的核心,建議使用epoll模型以提高效能;每個程式的連線數應根據實際需要來定,一般在10000以下(預設為1024)
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
events {
use epoll; //使用epoll模型
worker_connections 4096; //每程式處理4096個連線
}
若工作程式數為8,每個程式處理4096個連線,則允許Nginx正常提供服務的連線數已超過3萬個,(4096✖8=32768),當然具體還要看伺服器硬體,網路頻寬等物理條件的效能表現。
3.HTTP配置
使用“http { }” 界定標記,包括訪問日誌,HTTP埠,網頁目錄,預設字符集,連結保持,以及後面要講到的Web主機,PHP解析等一系列設定,其中大部分配置語句都包含在子界定標記“server { }”內。
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
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"';
access_log logs/access.log main; //訪問日誌位置
sendfile on; //支援檔案傳送(下載)
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65; //連線保持超時
#gzip on;
server { //Web服務的監聽配置
listen 80; //監聽地址及埠
server_name localhost; //網站名稱(FQDN)
charset utf-8; //網頁的預設字符集
access_log logs/host.access.log main;
location / { //根目錄配置
root html; //網站根目錄的位置
index index.html index.htm; //預設首頁(索引頁)
}
error_page 500 502 503 504 /50x.html; //內部錯誤的反饋頁面
location = /50x.html { //錯誤頁面配置
root html;
}
}
}
上述配置中,listen語句允許同時限定IP地址,採用“IP地址:埠”形式;root語句用來設定特定訪問位置(如“location /" 表示根目錄)的網頁文件路徑,預設為Nginx安裝目錄下的html/子目錄,根據需要可改為/var/www/html等其他路徑。
4.訪問狀態統計
ginx內建了HTTP_STUB_STATUS狀態統計模組,用來反饋當前的Web訪問情況,配置編譯引數時可新增–with-http_stub_status_module來啟用此模組支援,可使用命令/usr/local/nginx/sbin/nginx -V 來檢視以安裝的Nginx是否包含HTTP_STUB_STATUS模組。
要使用Nginx的狀態統計功能,除了啟用內建模組以外,還需要修改nginx.conf配置檔案,指定訪問位置並新增stub_status配置程式碼。
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~ /status { //訪問位置為/status
stub_status on; //開啟狀態統計功能
access_log off; //關閉此位置的日誌記錄
}
}
新的配置生效後,在瀏覽器中訪問Nginx伺服器的/status網路位置,可以看到當前的狀態統計資訊
active connections //活躍的連線數量
server accepts handled requests //總共處理了x個連線,成功握手y次,總共處理了z個請求
reading //讀取客戶端的連線數
writing //響應資料到客戶端的數量
waiting //已處理的請求數
五、Nginx訪問控制
- Nginx與Apache一樣,可以實現基於使用者授權的訪問控制,當客戶端想要訪問相應的網站或者目錄時,要求使用者輸入使用者名稱和密碼才能正常訪問,配置步驟與Apache基本一致。
- Apache網頁認證實現步驟可概括為:
1.生成使用者密碼認證檔案
2.修改主配置檔案相應目錄,新增認證配置項
3.重啟服務,訪問測試
基於授權的訪問控制步驟
Nginx實現授權訪問控制的步驟如下:
1.使用htpasswd生成使用者認證檔案,如果沒有該命令,可使用yum安裝httpd-tools軟體包,用法與Apache認證時方式相同,如:htpasswd -c /usr/local/nginx/passwd.db test。
[root@server ~]# yum -y install httpd-tools
[root@server ~]# htpasswd -c /usr/local/nginx/passwd.db test
New password: //輸入密碼
Re-type new password: //輸入密碼
Adding password for user test
[root@server ~]# cat /usr/local/nginx/passwd.db
test:$apr1$AF325xkf$bo4A4LFFGhAPDfPSaQu6b1
在/usr/local/nginx/目錄下生成了passwd.db檔案,使用者名稱是test,密碼輸入2次。在passwd.db中生成使用者和密碼的密文
2.修改密碼檔案的許可權為400,將所有者改為nginx,設定nginx的執行使用者能夠讀取
[root@server ~]# chmod 400 /usr/local/nginx/passwd.db
[root@server ~]# chown nginx /usr/local/nginx/passwd.db
3.修改主配置檔案nginx.conf,新增相應認證配置項。
[root@server ~]# vi /etc/local/nginx/conf/nginx.conf
server {
locaion / {
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
4.檢測語法,重啟服務
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server ~]# ulimit -n 65500
[root@server ~]# ulimit -n 65500 >> /etc/rc.local
[root@server ~]# systemctl restart nginx
5.用瀏覽器訪問網址,檢驗控制效果。
基於客戶端的訪問控制
1.基於客戶端的訪問控制簡介
基於客戶端的訪問控制是通過客戶端IP地址,決定是否允許對頁面訪問。Nginx基於客戶端的訪問控制要比Apache簡單,規則如下:
deny IP/IP段:拒絕某個IP或IP段的客戶端訪問。
allow IP/IP段:允許某個IP或IP段的客戶端訪問。
規則從上往下執行,如匹配則停止,不再往下匹配。
2.基於客戶端的訪問的控制步驟
Nginx實現客戶端訪問控制的步驟如下:
修改主配置檔案nginx.conf,新增相應配置項
vi /usr/local/nginx/conf/nginx.conf
server {
location / {
deny 192.168.10.1; //客戶端IP
allow all;
}
}
Deny 192.168.10.1 表示這個IP地址訪問會被拒絕,其他IP客戶端正常訪問。
重啟伺服器訪問網址,頁面已經訪問不到(出現403錯誤)
六、Nginx虛擬主機
- 利用虛擬主機,不用為每個要執行的網站提供一臺單獨的Nginx伺服器或單獨執行一組Nginx程式,虛擬主機提供了在同一臺伺服器,同一組Nginx程式上執行多個網站的功能。跟Apache一樣,Nginx也可以配置多種型別的虛擬主機,分別是基於IP的虛擬主機,基於域名的虛擬主機,基於埠的虛擬主機。
- 使用Nginx搭建虛擬主機伺服器時,每個虛擬Web站點擁有獨立的:“server { }”配置段,各自監聽的IP地址,埠號可以單獨指定,當然網路名稱也是不同的。
1.基於域名的虛擬主機
1.準備各個網站的目錄和測試首頁
[root@localhost ~]# mkdir -p /var/www/html/aa.com/
[root@localhost ~]# mkdir -p /var/www/html/bb.com/
[root@localhost ~]# echo "this is aa" >>
/var/www/html/erbao/index.html
[root@localhost ~]# echo "this is bb" >>
/var/www/html/sanbao/index.html
[root@localhost ~]# yum -y install bind
[root@localhost ~]# vim /etc/named.conf
[root@localhost ~]# vim /etc/named.rfc1912.zones
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/erbao.com.zone
[root@localhost ~]# vim /var/named/erbao.com.zone
[root@localhost ~]# cp -p /var/named/erbao.com.zone /var/named/sanbao.com.zone
[root@localhost ~]# systemctl start named
2.修改配置檔案,把配置檔案中的server { } 程式碼段全部去掉,加入2個新的server { }段,對應兩個域名
[root@server ~]# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.aa.com;
charset utf-8;
access_log logs/host.access.log main;
location / {
root /var/www/html/btcom;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.bb.com;
charset utf-8;
access_log logs/host.access.log main;
location / {
root /var/www/html/testcom; index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
[root@server ~]# [root@server ~]# 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
3.分別訪問2個域名,檢視是否訪問到不同的頁面,測試是否成功。
2.基於IP的虛擬地址
1.一臺主機如果有多個IP地址,可以設定每一個IP對應一個站點。主機安裝多個網路卡可以有多個IP,這裡採用虛擬IP的方式使主機有多個IP
[root@server ~]# ip addr
inet 192.168.10.40/24 brd 192.168.10255 scope global ens33
目前主機有一個網路卡,IP地址是192.168.10.40。在配置一個虛擬IP為192.168.10.50。
[root@server ~]# ifconfig ens37 192.168.10.50/24
inet 192.168.10.40/24 brd 192.168.10.255 scope global ens33
inet 192.168.10.50/24 brd 192.168.10.255 scope global ens37
2.以/var/www/htmltestcom和/var/www/html/btcom為兩個站點的根目錄,修改Nginx的配置檔案,使基於IP的虛擬主機生效。這裡省略了和基於域名虛擬主機的相同配置程式碼。
vi nginx.conf
server {
listen 192.168.10.40:80;
server_name www.aa.com;
}
server {
listen 192.168.10.50:80;
server_name www.bb.com;
}
3.分別訪問2個IP地址,檢視是否訪問到不同的頁面,測試是否成功。
3.基於埠的虛擬主機
1.選擇系統中不使用的埠,將多個埠對映到同一IP地址。
vi nginx.conf
server {
listen 192.168.10.40:80; //監聽6666埠
server_name www.aa.com;
}
server {
listen 192.168.10.50:8080; //監聽8888埠
server_name www.bb.com;
}
2.檢測埠是否執行正常。
service nginx stop
service nginx start
netstat -anpt | grep nginx
3.分別訪問2個埠地址,檢視是否訪問到不同的頁面,測試配置是否成功。
相關文章
- NGINX 如何遮蔽未被定義的虛擬主機的訪問Nginx
- 006.Nginx訪問控制Nginx
- Nginx虛擬主機配置Nginx
- Nginx 對訪問量的控制Nginx
- nginx虛擬主機實戰Nginx
- 007.Nginx虛擬主機Nginx
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權
- Java 21 虛擬執行緒如何限流控制吞吐量Java執行緒
- Flask——訪問控制Flask
- Mongodb訪問控制MongoDB
- 在虛擬機器上搭建主機可訪問的web服務虛擬機Web
- nginx基礎篇之虛擬主機實戰Nginx
- openGauss 訪問控制模型模型
- ABAC訪問控制模型模型
- 類的訪問控制
- 虛擬機器系列 | 執行引擎和垃圾回收虛擬機
- apache虛擬機器配置步驟和修改訪問埠Apache虛擬機
- Nginx 配置二級虛擬目錄訪問 Laravel 重寫NginxLaravel
- idrac虛擬控制檯的使用
- WordPress主機和共享虛擬主機不同在哪?
- 虛擬主機和vps主機使用哪些人群?
- Nginx虛擬主機常用配置(學習筆記四)Nginx筆記
- 【計算機網路】介質訪問控制計算機網路
- VMware虛擬機器如何設定使主機和虛擬機器不同IP虛擬機
- Ubuntu 增加埠訪問控制Ubuntu
- Swift 中的訪問控制Swift
- IOS - ACL (訪問控制列表)iOS
- HTTP之訪問控制「CORS」HTTPCORS
- Vue前端訪問控制方案Vue前端
- openGauss-控制權和訪問權分離
- 虛擬主機和VPS主機有哪些不同點呢
- 福音 虛擬主機
- Nginx 虛擬主機配置的三種方式(基於域名)Nginx
- 關於解決主機和虛擬機器ping不通的問題虛擬機
- docker使用Open Policy Agent(OPA)進行訪問控制Docker
- SAP CDS entity 中使用 @readonly 進行訪問控制
- weblogic控制檯訪問慢問題Web
- GOland配置ssh訪問Linux/Manjaro虛擬機器GoLandLinuxJAR虛擬機