# nginx.conf配置文件解析
- 定義Nginx運行的用戶和用戶組
- user www www;
- nginx進程數,建議設置為等于CPU總核心數。
- worker_processes 8;
- 全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]
- error_log /var/log/nginx/error.log info;
- 進程文件
- pid /var/run/nginx.pid;
- 一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配請求并不均勻,所以建議與ulimit -n的值保持一致。
- worker_rlimit_nofile 65535;
- 工作模式與連接數上限
- events
{
參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;
單個進程最大連接數(最大連接數=連接數*進程數)
worker_connections 65535;
}
- event下的一些配置及其意義
單個后臺worker process進程的最大并發鏈接數
worker_connections 1024;
并發總數是 worker_processes 和 worker_connections 的乘積即 max_clients = worker_processes * worker_connections
在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4
為什么上面反向代理要除以4,應該說是一個經驗值;
根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 *8000 =32000;
worker_connections 值的設置跟物理內存大小有關;
因為并發受IO約束,max_clients的值須小于系統可以打開的最大文件數;
而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右;
我們來看看360M內存的VPS可以打開的文件句柄數是多少:
$ cat /proc/sys/fs/file-max
輸出 34336;
32000 < 34336,即并發連接總數小于系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內;
所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置;使得并發總數小于操作系統可以打開的最大文件數目,其實質也就是根據主機的物理CPU和內存進行配置。當然,理論上的并發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。
ulimit -SHn 65535
- http下的一些配置及其意義
設定http服務器
- http
{
include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #默認文件類型
charset utf-8; #默認編碼
server_names_hash_bucket_size 128; #服務器名字的hash表大小
client_header_buffer_size 32k; #上傳文件大小限制
large_client_header_buffers 4 64k; #設定請求緩
client_max_body_size 8m; #設定請求緩
sendfile on; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對于普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。
autoindex on; #開啟目錄列表訪問,合適下載服務器,默認關閉。
tcp_nopush on; #防止網絡阻塞
tcp_nodelay on; #防止網絡阻塞
keepalive_timeout 120; #長連接超時時間,單位是秒
- gzip的一些配置及其意義
gzip模塊設置
gzip on; #開啟gzip壓縮輸出
gzip_min_length 1k; #最小壓縮文件大小
gzip_buffers 4 16k; #壓縮緩沖區
gzip_http_version 1.0; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
gzip_comp_level 2; #壓縮等級
gzip_types text/plain application/x-javascript text/css application/xml;#壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。
gzip_vary on;#limit_zone crawler $binary_remote_addr 10m; #開啟限制IP連接數的時候需要使用
- 虛擬主機一些配置及其意義
server {
# 監聽端口
listen 80;
# 域名可以有多個,用空格隔開
server_name www.yjscloud.site yjscloud.site;
index index.html index.htm index.jsp;
root /data/www/yjscloud;
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.jsp;
include fastcgi.conf;
}
# 什么是虛擬主機
虛擬主機是一種特殊的軟硬件技術,它可以將網絡上的每一臺計算機分成多個虛擬主機,每個虛擬主機可以獨立對外提供www服務,這樣就可以實現一臺主機對外提供多個web服務,每個虛擬主機之間是獨立,互不影響。

通過nginx可以實現虛擬主機的配置,nginx支持三種類型的虛擬主機配置,
- 1、基于ip的虛擬主機, (一塊主機綁定多個ip地址)

- 2、基于域名的虛擬主機(servername)

- 3、基于端口的虛擬主機(listen如果不寫ip端口模式)

# 配置解析拓展
## location 映射(ngx_http_core_module)
- location [ = | ~ | ~* | ^~ ] uri { ... }
* location URI {}:
對當前路徑及子路徑下的所有對象都生效;
* location = URI {}: 注意URL最好為具體路徑。
精確匹配指定的路徑,不包括子路徑,因此,只對當前資源生效;
- location ~ URI {}: 與 location ~* URI {}:
* 模式匹配URI,此處的URI可使用正則表達式,~區分字符大小寫,~*不區分字符大小寫;
- location ^~ URI {}:
* 不使用正則表達式
* 優先級:= > ^~ > ~|~* > /|/dir/
## location配置規則
- Directives with the = prefix that match the query exactly. If found, searching stops.
- All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
- Regular expressions, in order of definition in the configuration file.
- If #3 yielded a match, that result is used. Else the match from #2 is used.
- =前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
- 所有剩下的常規字符串,最長的匹配。如果這個匹配使用^?前綴,搜索停止。
- 正則表達式,在配置文件中定義的順序。
- 如果第3條規則產生匹配的話,結果被使用。否則,如同從第2條規則被使用
- location 的執行邏輯跟 location 的編輯順序無關。
矯正:這句話不全對,“普通 location ”的匹配規則是“最大前綴”,因此“普通 location ”的確與 location 編輯順序無關;但是“正則 location ”的匹配規則是“順序匹配,且只要匹配到第一個就停止后面的匹配”;“普通location ”與“正則 location ”之間的匹配順序是?先匹配普通 location ,再“考慮”匹配正則 location 。注意這里的“考慮”是“可能”的意思,也就是說匹配完“普通 location ”后,有的時候需要繼續匹配“正則 location ”,有的時候則不需要繼續匹配“正則 location ”。兩種情況下,不需要繼續匹配正則 location :
* 當普通 location 前面指定了“ ^~ ”,特別告訴 Nginx 本條普通 location 一旦匹配上,則不需要繼續正則匹配;
* 當普通location 恰好嚴格匹配上,不是最大前綴匹配,則不再繼續匹配正則
- 獻給我的朋友們
- 一、個人對學習的看法
- 二、運維技能圖譜
- 三、運維常用技能
- 3.1 Vim(最好用的編輯器)
- 3.2 Nginx & Tengine(Web服務)
- 1. Nginx介紹和部署
- 2. Nginx配置解析
- 3. Nginx常用模塊
- 4. Nginx 的session 一致性問題
- 3.3 Tomcat(Web中間件)
- 3.4 Keepalived(負載均衡高可用)
- 3.5 Memcache(分布式緩存)
- 3.6 Zookeeper(分布式協調系統)
- 3.7 KVM(開源虛擬化)
- 1. 虛擬化介紹
- 2. KVM基礎
- 3. 設置VNC和時間同步
- 4. kvm虛擬機快照備份
- 5. kvm虛擬機在線擴展磁盤
- 6. kvm虛擬機靜態遷移
- 7. kvm虛擬機動態遷移
- 8. kvm虛擬機存儲池配置
- 9. cpu添加虛擬化功能
- 3.8 GitLab(版本控制)
- 3.8.1 GitLab安裝與漢化
- 3.9 Jenkins(運維自動化)
- 3.10 WAF(Web防火墻)
- 3.10.1初探WAF
- 四、常用數據庫
- 4.1 MySQL(關系型數據庫)
- 1. MySQL源碼安裝
- 4.2 Mongodb(適用與大數據分析的數據庫)
- 4.3 Redis(非關系數據庫)
- 五、自動化運維工具
- 5.1 Cobbler(系統自動化部署)
- 5.2 Ansible(自動化部署)
- 5.3 Puppet(自動化部署)
- 5.4 SaltStack(自動化運維)
- 六、存儲
- 6.1 GFS(文件型存儲)
- 6.2 Ceph(后端存儲)
- 七、運維監控工具
- 7.1 對監控的理解
- 7.2 Zabbix(運維監控)
- 7.2.1 Zabbix簡介
- 7.2.2 Zabbix服務部署
- 1. Zabbix服務端部署
- 2. Zabbix客服端部署
- 3. 配置前端展示
- 4. zabbix告警配置
- 7.2.3 Zabbix監控服務
- 1. 監控網絡設備
- 2. 自定義Nginx監控
- 7.3 云鏡(安全監控)
- 7.4 ELK(日志收集展示)
- 八、運維云平臺
- 8.1 OpenStack(開源云操作系統)
- 8.1.1 OpenStack簡介
- 8.1.2 實驗架構設計
- 8.1.3 集群環境準備
- 8.1.4 controller節點部署
- 1. 安裝Mariadb Galera Cluster集群
- 2. 安裝RabbitMQ Cluster集群
- 3. 安裝Pacemaker
- 4. 安裝HAProxy
- 5. 安裝配置Keystone
- 6. 安裝配置glance
- 1. 制作鏡像模板
- 7. 安裝配置nova
- 8. 安裝配置neutron
- 1. 配置虛擬機網絡
- 9. 安裝Dashboard
- 10. 安裝配置cinder
- 8.1.5 compute節點部署
- 1. 安裝相關軟件包
- 2. 安裝Neutron
- 3. 配置cinder
- 4. 創建第一個虛擬機
- 8.1.6 OpenStack報錯處理
- 1. cinder僵尸卷刪除
- 8.1.7 快速孵化虛擬機方案
- 8.1.8 Kolla容器化部署OpenStack
- 1. 單點部署
- 2. 多節點部署
- 8.2 Tstack(騰訊云平臺)
- 8.3 K8s(微服務容器化)
- 九、運維編程技能
- 9.1 Shell(運維必會語言)
- 9.2 Python(萬能的膠水語言)
- 十、Devops運維
- 10.1 理念
- 10.2 Devops實戰