1.yum -y install gcc gcc-c++ autoconf pcre pcre-devel make
automake 安裝擴(kuò)展
- yum -y install wget httpd-tools vim 安裝工具
初始化目錄
cd /opt; mkdir app download logs work backup - ping www.baidu.com 看是否能ping通
4.關(guān)閉防火墻(我沒關(guān) 不知道會(huì)不會(huì)出啥幺蛾子 回頭再看)
5.getenforce 查看selinux是否開啟(如開啟 執(zhí)行6 沒開啟執(zhí)行7)
6.setenforce 0 關(guān)閉selinux
常見的HTTP服務(wù)
HTTPD - Apache 基金會(huì)
IIS - 微軟
GWS - Google
為什么選擇nginx
原因一 、slinux IO 多路復(fù)用epoll
一介评、什么是IO多路復(fù)用
多個(gè)描述符的I/O操作都能在一個(gè)線程內(nèi)并發(fā)交替地順序完成彼念,這就叫I/O多路復(fù)用舆驶,這里的“復(fù)用”指的是復(fù)用同一個(gè)線程
二冤荆、什么是epoll
IO多路復(fù)用的實(shí)現(xiàn)方式 select、poll他托、epoll
select會(huì)不停遍歷礼仗,等待被喚醒,線形遍歷
缺點(diǎn):
1)能夠監(jiān)視文件描述符的數(shù)量存在最大限制
2)線形掃描效率低下
epoll模型
1)每當(dāng)FD就緒会宪,采用系統(tǒng)的回調(diào)函數(shù)之間將fd放入肖卧,效率更高
2)最大連接無限制
原因二、輕量級(jí)
功能模塊少掸鹅,代碼模塊少
原因三塞帐、CPU親和
一拦赠、掃描是CPU親和
是一種把CPU核心和Nginx工作進(jìn)程綁定方式,把每個(gè)worker進(jìn)程固定在一個(gè)cpu上葵姥,減少切換cpu的cache miss荷鼠,獲得更好的性能
原因四、sendfile
一臺(tái)服務(wù)器需要從內(nèi)核傳輸?shù)接脩?需要多次切換榔幸,nginx2.2+(零拷貝模式)傳輸靜態(tài)文件只到內(nèi)核 傳遞給socket然后到用戶
基于Nginx的中間件架構(gòu)
一允乐、 Nginx快速搭建與基本參數(shù)使用
Mainline version 開發(fā)板
Stable version 穩(wěn)定版
Legacy version 歷史版本
安裝:
http://nginx.org/en/download.html 官網(wǎng)
Linux packages for stable version 點(diǎn)擊
[nginx] 找到這行復(fù)制
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/(baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/)
gpgcheck=0
enabled=1
vim /etc/yum.repos.d/nginx.repo 編輯這個(gè)文件 黏貼進(jìn)去
yum -y install nginx 安裝
nginx -v 查看版本
nginx -V 查看編譯的參數(shù)
二、基本參數(shù)使用
1削咆、安裝目錄講解
命令: rpm -ql nginx
路徑 類型 作用
/etc/logrotate.d/nginx 配置文件 Nginx日志輪轉(zhuǎn)牍疏,用于 logrotate服務(wù)的日志切割
/etc/nginx 目錄、配置文件 Nginx主配置文件
/etc/nginx/nginx.conf
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/fastcgi_params 配置文件 cgi配置相關(guān)态辛,fastcgi配置
/etc/nginx/uwsgi_params
/etc/nginx/scgi_params
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/koi-utf 配置文件 編碼轉(zhuǎn)化映射轉(zhuǎn)換文件
/etc/nginx/koi-win
/etc/nginx/win-utf
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/etc/nginx/mime.types 配置文件 設(shè)置http協(xié)議的Content-Type與擴(kuò)展名的對(duì)應(yīng)關(guān)系
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/lib/systemd/system/nginx-debug.service 配置文件 用于配置出系統(tǒng)守護(hù)進(jìn)程管理器管理方式
/usr/lib/systemd/system/nginx/service
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/lib64/nginx/modules 目錄 Nginx模塊目錄
/etc/nginx/modules
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/sbin/nginx 命令 Nginx服務(wù)的啟動(dòng)管理的終端命令
/usr/sbin/nginx-debug
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/usr/share/doc/nginx-1.12.0 文件麸澜、目錄 Nginx的手冊(cè)和幫助文件
/usr/share/doc/nginx-1.12.0/COPYRIGHT
/usr/share/man/man8/nginx/8.gz
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/var/cache/nginx 目錄 Nginx的緩存目錄
---------------------------------------------------------------華麗麗的分割線----------------------------------------------------------------------------------
/var/log/nginx 目錄 Nginx的日志目錄
2、安裝編譯參數(shù)
命令: nginx -V
編譯選項(xiàng) 作用
--prefix=/etc/nginx 安裝目的目錄或路徑
--sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib64/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx/pid
--lock-path=/var/run/nginx.lock
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--httpd-client-body-temp-path=/var/cache/nginx/client_temp 執(zhí)行對(duì)應(yīng)模塊時(shí)奏黑,Nginx所保留的臨時(shí)性文件
--httpd-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/chache/nginx/scgi_temp
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--user=nginx 設(shè)定Nginx進(jìn)程啟動(dòng)的用戶和組用戶
--group=nginx
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--with-cc-opt=parameters 設(shè)置額外的參數(shù)將被添加到CFLAGS變量
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
--with-ld-opt=parameters 設(shè)置附加的參數(shù)炊邦,連接系統(tǒng)庫(kù)
---------------------------------------------------------------華麗麗的分割線---------------------------------------------------------------------------------
3.Nginx默認(rèn)配置語法
user 設(shè)置nginx服務(wù)的系統(tǒng)使用用戶
worker_processes 工作進(jìn)程數(shù)(保持和cpu核數(shù)一樣)
error_log nginx的錯(cuò)誤日志
pid nginx服務(wù)啟動(dòng)時(shí)候pid
events
|- worker_connections 每個(gè)進(jìn)程允許最大連接數(shù)(65535最大 10000以上足夠正常企業(yè)使用)
|- use 工作進(jìn)程數(shù)
http{
server{
listen 80; 端口
server_name localhost; 域名
location / 子目錄和當(dāng)前目錄
{
root /usr/share/nginx/html; 指定目錄
index index.html index.htm 默認(rèn)訪問頁(yè)面(如果index.html沒有找到 那么會(huì)去找index.htm)
}
error_page 500 502 503 504 /50.html
location = /50x.html{
root /usr/share/nginx/html;
}
}
server{
... ...
}
}
curl -v http://www.imooc.com > /dev/null 查看網(wǎng)頁(yè)請(qǐng)求和相應(yīng)信息
2、Nginx日志類型
包括error.log access_log
error.log 主要記錄 nginx處理http請(qǐng)求的錯(cuò)誤的狀態(tài)熟史,以及nginx本身服務(wù)的錯(cuò)誤狀態(tài)馁害,按照不同的級(jí)別記錄
error_log /var/log/nginx/error.log warn;
warn 記錄錯(cuò)誤日志的級(jí)別 可根據(jù)個(gè)人需要進(jìn)行調(diào)節(jié)
access_log 記錄nginx每一次http請(qǐng)求的訪問狀態(tài)(用于分析每一次訪問的請(qǐng)求和客戶的進(jìn)行交互和行為的分析)
規(guī)定了log_format 的格式 命名為main
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; 按照main格式進(jìn)行寫入
main 上下兩個(gè)名字要對(duì)應(yīng)
nginx.conf 中記錄有 上述兩個(gè)配置文件的位置
3、Nginx變量
HTTP請(qǐng)求變量 -arg_PARMETER蹂匹、http_HEADER(request請(qǐng)求里面的head)碘菜、sent_http_HEADER(服務(wù)端返回給客戶端的head)
vim nginx.conf
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
增加'$http_user_agent' (用戶的agent信息) 請(qǐng)求信息到access_log
nginx -t -c /etc/nginx/nginx.conf 檢查配置文件是否正確 -c 指定檢查路徑 (出現(xiàn)successful 表示成功)
nginx -s reload -c /etc/nginx/nginx.conf 重啟nginx 并指定配置文件路徑
curl http://127.0.0.1 請(qǐng)求幾次本機(jī)做實(shí)驗(yàn)
tail -n 200 /var/log/nginx/access.log 查看access.log日志
log_format 參數(shù)講解
log_format main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr 客戶端地址
$remote_user http客戶端/用戶端請(qǐng)求nginx認(rèn)證的用戶名(默認(rèn)沒有開啟認(rèn)證模塊不會(huì)記錄)
$time_local nginx的時(shí)間
$request request頭的請(qǐng)求行
$status response返回的狀態(tài)碼
$body_bytes_sent 從服務(wù)端響應(yīng)給客戶端body的大小
$http_referer 上一個(gè)頁(yè)面的地址(防盜鏈一類的會(huì)在這做)
$http_user_agent 客戶端用什么訪問的
$http_x_forwarded_for 記錄每一級(jí)用戶通過http請(qǐng)求里面所對(duì)應(yīng)攜帶的http頭信息
四、Nginx模塊講解
Nginx官方模塊
第三方模塊
2.安裝編譯參數(shù)詳解
編譯選項(xiàng) 作用
--with-http_stub_status_module Nginx客戶端的狀態(tài)
http_stub_status_module配置
Syntax:stub_status;
Default : --
Context:server,location
vim defaulte.conf
加入
location /mystatus{
stub_status;
}
nginx -tc /etc/nginx/nginx.conf 檢查配置是否有錯(cuò)
nginx -s reload -c /etc/nginx/nginx.conf 重啟nginx
訪問地址:http://47.93.0.92/mystatus
展示信息
Active connections: 5 nginx當(dāng)前活躍的連接數(shù)
server accepts handled requests
128 128 140 nginx處理的握手的總次數(shù) 限寞、處理的連接數(shù) 忍啸、總請(qǐng)求數(shù)
Reading: 0 Writing: 1 Waiting: 4 讀,寫履植,等待
四计雌、默認(rèn)模塊講解
編譯選項(xiàng) 作用
--with-http_random_index_module 目錄中選擇一個(gè)隨機(jī)主頁(yè)
2、random_index_module
Syntax: random_index on | off;
Default: random_index off;
Context:location
配置后 會(huì)隨機(jī)訪問主頁(yè)面 不會(huì)選擇隱藏文件
編譯選項(xiàng) 作用
--with-http_sub_module HTTP內(nèi)容替換
2玫霎、http_sub_module 語法有多個(gè) 列出常用的
替換指定字符串
Syntax: sub_filter string replacement; 模塊凿滤、內(nèi)容、替換后的內(nèi)容
Default: --
Context:http,server,location 加在http下可對(duì)多個(gè)server生效
在客戶端向服務(wù)端請(qǐng)求時(shí)庶近,用來判斷內(nèi)容是否有更新
Syntax: sub_filter_last_modified on | off;
Default: sub_filter_last_modified off;
Context: http,server,location
匹配所有html中第一個(gè) 還是全部 on第一個(gè) off全部
Syntax: sub_filter_once on | off;
Default: sub_filter_once on;
Context: http,server,location
例: 替換字符串
上圖為關(guān)閉只匹配一個(gè)的選項(xiàng)
八翁脆、Nginx的請(qǐng)求限制
連接頻率限制 - limit_conn_module
請(qǐng)求頻率限制 - limit_req_module
HTTP請(qǐng)求建立在一次TCP連接基礎(chǔ)上
一次TCP請(qǐng)求至少產(chǎn)生一次HTTP請(qǐng)求
連接限制配置語法
Syntax: limit_conn_zone key zone=name:size;
Default: --
Context:http
Syntax: limit_conn zone number;
Default: --
Context:http,server,location
請(qǐng)求限制配置語法
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: --
Context:http
Syntax: limit_req zone=name [burst=number] [nodelay];
Default: --
Context:http,server,location
連接限制 : 固定寫法 客戶ip 規(guī)定空間1m
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
請(qǐng)求限制:固定寫法 客戶ip 規(guī)定空間1m 1秒請(qǐng)求一次
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
配置實(shí)驗(yàn):
實(shí)驗(yàn)1: 一秒只接受一個(gè)ip一次請(qǐng)求
#limit_conn conn_zone 1;
規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
#limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
limit_req zone=req_zone;
有19個(gè)非200請(qǐng)求
實(shí)驗(yàn)2:一秒接受1個(gè)ip一次請(qǐng)求 把超出的3個(gè)請(qǐng)求放在下一秒執(zhí)行 其他超出部分直接返回 不執(zhí)行
#limit_conn conn_zone 1;
規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
#limit_req zone=req_zone;

有16個(gè)非200請(qǐng)求
服務(wù)端同一時(shí)刻只允許一個(gè)ip連接
limit_conn conn_zone 1;
規(guī)定 超過指定的數(shù)率后 3個(gè)放到后一秒執(zhí)行 其他的不執(zhí)行
#limit_req zone=req_zone burst=3 nodelay;
#limit_req zone=req_zone burst=3;
#limit_req zone=req_zone;
九 、 Nginx的訪問控制
基于Ip的訪問控制 http_access_module
基于用戶的信任登錄 http_auth_basic_module
1. http_access_module
允許 ip 網(wǎng)段 soket 所有
Syntax: allow address | CIDR | unix: | all;
Default: --
Context: http鼻种,server反番,location,limit_except
禁止 ip 網(wǎng)段 soket 所有
Syntax: deny address | CIDR | unix: | all;
Default: --
Context: http,server恬口,location校读,limit_except
實(shí)驗(yàn): 限制自己ip不能訪問 其他ip允許訪問
location ~ ^/admin.html {
root /opt/app/code;
deny 106.121.75.209;
allow all;
index index.html index.htm;
}
實(shí)驗(yàn):限制只能某網(wǎng)段 其他ip不允許 多用于后臺(tái)
location ~ ^/admin.html {
root /opt/app/code;
allow 106.121.75.0/24;
deny all;
index index.html index.htm;
}
2. http_access_module 局限性
通過代理訪問后 會(huì)識(shí)別成代理ip 而非自己本身ip
3、 http_x_forwarded_for
http_x_forwarded_for = Client IP , Proxy(1) IP , Proxy(2) IP
4祖能、http_access_module局限性
方法一、 采用別的HTTP頭信息控制訪問蛾洛,如:HTTP_X_FORWARD_FOR
方法二养铸、 結(jié)合geo模塊作
方法三、 通過HTTP自定義變量傳遞
1轧膘、 http_auth_basic_module 用戶登錄認(rèn)證
字符串
Syntax: auth_basic string | off;
Default: auth_basic off;
Context:http钞螟,server,location谎碍,limit_except
認(rèn)證存儲(chǔ)用戶名密碼的文件路徑
Syntax: auth_basic_user_file file;
Default : --
Context: http鳞滨,server,location蟆淀,limit_except
htpasswd -c ./auth_conf jeson 生成一個(gè)保存密碼的文件
例子:
location ~ ^/admin.html {
root /opt/app/code;
auth_basic "Auth access test!input your password!";
auth_basic_user_file /etc/nginx/auth_conf;
index index.html index.htm;
}
2拯啦、 http_auth_basic_module 局限性
一、 用戶信息依賴文件方式
二熔任、 操作管理機(jī)械褒链,效率低下
3、解決方案
一疑苔、Nginx結(jié)合LUA實(shí)現(xiàn)高效驗(yàn)證
二甫匹、Nginx和LDAP打通,利用nginx-auth-ldap模塊
基于Nginx的中間件架構(gòu)
進(jìn)階學(xué)習(xí) - 常見Nginx中間架構(gòu)
一惦费、靜態(tài)資源web服務(wù)
二兵迅、代理服務(wù)
三、負(fù)載均衡調(diào)度器SLB
四薪贫、動(dòng)態(tài)緩存