目錄
- 一.Nginx概述
- 1.Nginx
- 2.Apache與Nginx的區別
- 二.Nginx編譯安裝
- 1.關閉防火墻,將安裝Nginx所需的軟體包傳到opt目錄下
- 2.安裝依賴包
- 3.創建運行用戶、組
- 4.編譯安裝Nginx
- 5.檢查、啟動、重啟、停止nginx服務
- 6.添加Nginx服務到系統服務
- 三.Nginx服務的主組態檔
- 1. 全域配置
- 2. I/O事件配置
- 3.HTTP 配置
- 4.Web服務的監聽配置
- 5.瀏覽器訪問
- 四.訪問狀態統計配置
- 1.查看已安裝的Nginx是否包含所需模塊
- 2.修改nginx.conf 組態檔
- 3.重啟服務,訪問測驗
- 五.基于授權的訪問控制
- 1.生成用戶密碼認證檔案
- 2.修改主組態檔相對應目錄,添加認證配置項
- 3.重啟服務,訪問測驗
- 六.基于客戶端的訪問控制
- 七.基于域名的 Nginx 虛擬主機
- 1.為虛擬主機提供域名決議
- 2.為虛擬主機準備網頁檔案
- 3.修改Nginx的組態檔
- 4.重啟服務,訪問測驗
- 5.瀏覽器訪問
- 八.基于IP 的 Nginx 虛擬主機
- 1.創建虛擬網卡
- 2.修改nginx組態檔
- 3.重啟服務
- 4.瀏覽器訪問
- 九.基于埠的 Nginx 虛擬主機
- 1.編輯nginx組態檔
- 2.重啟服務
- 3.瀏覽器訪問
一.Nginx概述
1.Nginx
一款高性能,輕量級Web服務軟體,穩定性高,系統資源消耗低,對于HTTP并發連接的處理能高,單臺物理服務器可支持30000-50000個并發請求,
2.Apache與Nginx的區別
Apache:穩定,對動態請求處理強,但同時高并發性能較弱,耗費資源多,處理請求是阻塞型的,配置比較麻煩,
Nginx:高并發處理能力強,擅長處理靜態請求,反向代理,負載均衡,處理請求是異步非阻塞的,配置簡單,
二.Nginx編譯安裝
1.關閉防火墻,將安裝Nginx所需的軟體包傳到opt目錄下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
nginx-1.12.0.tar.gz

2.安裝依賴包
nginx的配置及運行需要pcre、zlib等軟體包的支持,因此需要安裝這些軟體的開發包,以便提供相應的庫和頭檔案,
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

3.創建運行用戶、組
Nginx 服務程式默認以nobody 身份運行,建議為其創建專門的用戶賬號,以便更準確地控制其訪問權限
useradd -M -s /sbin/nologin nginx

4.編譯安裝Nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ 指定nginx的安裝路徑
--user=nginx \ 指定用戶名.
--group=nginx \ 指定組名
--with-http_stub_status_module 啟用http_stub_status_module 模塊以支持狀態統計


make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 讓系統識別nginx的操作命令

5.檢查、啟動、重啟、停止nginx服務
nginx -t 檢查組態檔是否配置正確

啟動
nginx

停止
cat /usr/1ocal/nginx/logs/nginx.pid 先查看nginx的PID號
kill -3 <PID號>
kill -s QUIT <PID號>
killall -3 nginx
killall -s QUIT nginx

多載
kill -1 <PID號>
kill -s HUP <PID號>
killall -1 nginx
killall -s HUP nginx

日志分隔,重新打開日志檔案
kill -USR1 <PID號>
平滑升級
kill -USR2 <PID號>
新版本升級:
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx
--group=nginx
--with-http_stub_status_module \
--with-http_ssl_module
make
mv /usr/1ocal/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade
#或者先killall nginx ,再/usr/1ocal/nginx/sbin/nginx
6.添加Nginx服務到系統服務
方法一
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig:- 99 20
#description:Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/1ocal/nginx/1ogs/nginx.pid"
case "$1" in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start I stop Irestart Ireload}"
exit 1
esac
exit 0

chmod +x /etc/init.d/nginx
chkconfig --add nginx 添加為系統服務
systemctl stop nginx 啟動服務
systemctl start nginx 關閉服務

方法二
vim /1ib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/1ocal/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[Unit] :服務的說明
Description:描述服務
After:依賴,當依賴的服務啟動之后再啟動自定義的服務
[Service]服務運行引數的設定
Type= forking是后臺運行的形式,使用此啟動型別應同時指定PIDFile=,以便systemd能夠跟蹤服務的主行程,
ExecStart為服務的具體運行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務分配獨立的臨時空間
注意:啟動、重啟、停止命令全部要求使用絕對路徑
[Install] 服務安裝的相關設定, 可設定為多用戶
chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload 重新加載服務組態檔
systemctl start nginx.service
systemctl enable nginx.ervice

三.Nginx服務的主組態檔
Nginx服務的主組態檔 nginx.conf
vim /usr/local/nginx/conf/nginx.conf 編輯主組態檔
1. 全域配置
#user nobody; 運行用戶,若編譯時未指定則默認為nobody
worker_ processes 1 ; 作業行程數量,可配置成服務器內核數*2,如果網站訪問量不大,一般設為1就夠用了
#error_ 1og 1ogs/error.log; 錯誤日志檔案的位置
#pid logs/nginx.pid; PID檔案的位置

2. I/O事件配置
events{
use epoll; 使用epoll模型,2.6及以上版本的系統內核,建議使用epol1模型以提高性能
worker_connections 1024; 每個行程處理1024個連接
如提高每個行程的連接數還需執行“ulimit-n65535”命令臨時修改本地每個行程可以同時打開的最大檔案數,
在Linux平臺上,在進行高并發TCP連接處理時,最高的并發數量都要受到系統對用戶單一行程同時可打開檔案數量的限制(這是因為系統為每個TCP連接都要創建一個socket句柄,每個socket句柄同時也是一“個檔案句柄),
可使用ulimit -a命令查看系統允許當前用戶行程打開的檔案數限制,


3.HTTP 配置
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_1og logs/access.1og main;
##支持檔案發送(下載)
sendfile on;
##此選項允許或禁止使用socket的TCP_CORK的選項(發送資料包前先快取資料),此選項僅在使用sendfile的時候使用
#tcp_nopush on;
##連接保持超時時間,單位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模塊設定,設定是否開啟gzip壓縮輸出
#gzip on;

4.Web服務的監聽配置
server {
##監聽地址及埠
listen 80;
##站點域名,可以有多個,用空格隔開
server_name www.kgc.com;
##網頁的默認字符集
charset utf-8;
##根目錄配置
location / {
##網站根日錄的位置/usr/1ocal/nginx/html
root html;
##默認首頁檔案名
index index.html1 index.html;
}
##內部錯誤的反饋頁面
error_page 500 502 503 504 /50x.html;
##錯誤頁面配置
location = /50x.html {
root html;
}
}

日志格式設定:
r e m o t e a d d r 與 remote_addr與 remotea?ddr與http_ x_ forwarded_for用以記錄客戶端的ip地址;
$remote_ user: 用來記錄客戶端用戶名稱;
$time_1ocal: 用來記錄訪問時間與時區;
$request:用來記錄請求的url與http協議;
$status:用來記錄請求狀態:成功是200;
$body_bytes_sent :記錄發送給客戶端檔案主體內容大小;
$http_referer: 用來記錄從哪個頁面鏈接訪問過來的;
h t t p u s e r a g e n t : 記 錄 客 戶 瀏 覽 器 的 相 關 信 息 ; 通 常 w e b 服 務 器 放 在 反 向 代 理 的 后 面 , 這 樣 就 不 能 獲 取 到 客 戶 的 I P 地 址 了 , 通 過 http_ user_agent: 記錄客戶瀏覽器的相關資訊; 通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過 httpu?sera?gent:記錄客戶瀏覽器的相關信息;通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過remote_add拿到的IP地址是反向代理服務器的iP地址,反向代理服務器在轉發請求的http頭資訊中,可以增加x_forwarded_for資訊,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址,
location常見配置指令,root,alias,proxy_pass
root (根路徑配置) :請求www. kgc.com/test/1.jpg,會回傳檔案/usr/local/nginx/html/test/1.jpg
alias (別名配置) :請求www. kgc.com/test/1.jpg,會回傳檔案/usr/local/nginx/html/1.jpg
proxy_ pass (反向代理配置) :
proxy_ pass http://127.0.0.1:8080/; 會轉發請求到http://127.0.0.1:8080/1. jipg
proxy_ pass http://127.0.0.1:8080; 會轉發請求到http://127.0.0.1:8080/test/1.jpg
5.瀏覽器訪問
systemctl restart nginx
echo “192.168.121.22 www.kgc.com” >> /etc/hosts
http://www.kgc.com


四.訪問狀態統計配置
1.查看已安裝的Nginx是否包含所需模塊
先使用命令/usr/local/nginx/sbin/nginx -V查看已安裝的Nginx是否包含HTTP_STUB_STATUS 模塊
2.修改nginx.conf 組態檔
指定訪問位置并添加stub_status 配置
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
http {
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
location / {
root html;
index index.html1 index.html;
}
##添加stub_status 配置##
location /status { #訪問位置為/status
stub_status on; #打開狀態統計功能
access_log off; #關閉此位置的日志記錄
}
}

3.重啟服務,訪問測驗
systemctl restart nginx

瀏覽器訪問http://192.168.121.44/status
Active connections :表示當前的活動連接數
server accepts handled requests :表示已經處理的連接資訊,三個數字依次表示已處理的連接數、成功的TCP握手次數、
已處理的請求數,
可curl http://192. 168.121.44/status結合awk與if 陳述句進行性能監控,

五.基于授權的訪問控制
1.生成用戶密碼認證檔案
yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

2.修改主組態檔相對應目錄,添加認證配置項
vim /usr/local/nginx/conf/nginx.conf
server {
location / {
##添加認證配置##
auth_basic "secret"; 設定密碼提示框文字資訊
auth_basic_user_file /usr/local/nginx/passwd.db;

3.重啟服務,訪問測驗
nginx -t
systemctl restart nginx
瀏覽器訪問http://192.168.121.44


六.基于客戶端的訪問控制
訪問控制規則如下:
deny IP/IP 段:拒絕某個 IP 或 IP 段的客戶端訪問,
allow IP/IP 段:允許某個 IP 或 IP 段的客戶端訪問,
規則從上往下執行,如匹配則停止,不再往下匹配,
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
添加控制規則
deny 192.168.121.33; 拒絕訪問的客戶端 IP
allow all; 允許其它IP客戶端訪問
}
}
systemctl restart nginx


七.基于域名的 Nginx 虛擬主機
1.為虛擬主機提供域名決議
echo "192.168.121.44 www.kgc.com www.benet.com" >> /etc/hosts

2.為虛擬主機準備網頁檔案
mkdir -p /var/www/html/benet
mkdir -p /var/www/html/kgc
echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html
echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html

3.修改Nginx的組態檔
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.kgc.com; #設定域名www.kgc.com
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc; #設定www.kgc.com 的作業目錄
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 80;
server_name www.benet.com; #設定域名www.benet.com
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}


4.重啟服務,訪問測驗
systemctl restart nginx

5.瀏覽器訪問
http://www.kgc.com
http://www.benet.com

八.基于IP 的 Nginx 虛擬主機
1.創建虛擬網卡
ifconfig ens33:0 192.168.121.45 netmask 255.255.255.0

2.修改nginx組態檔
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.121.44:80; #設定監聽地址192.168.121.44
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.121.45:80; #設定監聽地址192.168.121.45
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}


3.重啟服務
systemctl restart nginx

4.瀏覽器訪問
http://192.168.121.44
http://192.168.121.45

九.基于埠的 Nginx 虛擬主機
1.編輯nginx組態檔
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.121.44:8888; #設定監聽 8888埠
server_name www.kgc.com;
charset utf-8;
access_log logs/www.kgc.access.log;
location / {
root /var/www/html/kgc;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.121.44:7777; #設定監聽7777埠
server_name www.benet.com;
charset utf-8;
access_log logs/www.benet.access.log;
location / {
root /var/www/html/benet;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}


2.重啟服務
systemctl restart nginx

3.瀏覽器訪問
http://192.168.121.44:8888
http://192.168.121.44:7777

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286514.html
標籤:其他

