本文介紹Nginx的配置文件信息,以及如何在虛擬站點中使用PHP。
一、Nginx主配置文件及解析
Nginx配置文件主要分為4部分:
main(全局設置)部分設置的指令將影響其他所有設置;
server(主機設置)部分的指令主要用於指定主機和端口;
upstream(負載均衡服務器設置)部分指令主要用於負載均衡,設置一系列的后端服務器;
location(URL匹配特定位置的設置)部分用於匹配網頁位置。
四者之間的關系:server繼承main,location繼承server,upstream既不會繼承其他設置,也不會被繼承。
- # 指定Nginx Worker進程運行用戶以及用戶組,默認由nobody賬號運行。如果編譯Nginx的時候指定了用戶和用戶組,該選項可以關閉
- user nobody;
- # 指定Nginx需要開啟的進程數,每個進程平均耗費10~12M內存。建議數量設置成與CPU內核的數量一致就可以了。
- # cpu的核心數可以使用 cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l 或 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 命令進行查
- worker_processes 1;
- # 定義全局錯誤日志文件,后面可以設置輸出級別:debug、info、notice、warn、error、crit
- error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- # 用來指定進程id的存儲文件位置
- pid logs/nginx.pid;
- # 啟用TCMalloc的設置,見上節相關的描述
- google_perftools_profiles /tmp/tcmalloc;
- # 用於綁定worker進程和CPU,該值必須和Linux內核打開文件數關聯起來,如將該值設置為65535就必須在Linux命令行中執行 ulimit -HSn 65535
- worker_rlimit_nofile 65535;
- events {
- # 用來指定Nginx的工作模式,支持的模式有select、poll、kqueue、epool、rtsig和/dev/poll。其中select和poll都是標准的工作模式
- # kqueue和epoll是高效的工作模式,前者用在linux平台上,后者用於BSD系統。
- use epoll;
- # 定義每個進程的最大連接數,默認是1024,該參數的最大連接數受Linux系統進程的最大打開文件數限制,必須使用 ulimit命令
- # 另外,最大客戶端連接數max_client=worker_processes*worker_connections,作為反向代理的話還需要除以4。
- worker_connections 65535;
- }
- http {
- # 引用外部文件,類似於Apache中的include
- include mime.types;
- # 當出現無法解析的文件時,提示用戶下載
- default_type application/octet-stream;
- # 定義日志的格式,后面的main為格式的名稱,可以在access_log指令中進行引用
- #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;
- # 設定請求緩沖
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffers 432k;
- # 設置客戶端能夠上傳文件大小的限制
- client_max_body_size 600m;
- # 是否開啟高效文件傳輸模式,將tcp_nopush和tcp_nodelay兩個指令設置為on用於防止網絡阻塞
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- # 隱藏nginx的版本顯示,增強安全性
- server_tokens off;
- # 用於設置客戶端連接保持活動的超時時間,單位為秒,默認為75s
- #keepalive_timeout 0;
- keepalive_timeout 65;
- # 用於指定響應客戶端的超時時間,這個超時僅限於兩個連接活動之間的時間,默認為60s
- #send_timeout 60;
- # 下面是FastCGI的優化指令
- # 連接到后端FastCGI的超時時間
- fastcgi_connect_timeout 300;
- # 向FastCGI傳送請求的超時時間
- fastcgi_send_timeout 300;
- # 接收FastCGI應答的超時時間
- fastcgi_read_timeout 300;
- # 指定讀取FastCGI應答第一部分需要多大的緩沖區
- fastcgi_buffer_size 64k;
- fastcgi_buffers 464k;
- # 默認值是fastcgi_buffers的兩倍
- fastcgi_busy_buffers_size 128k;
- # 表示在寫入緩存文件時使用多大的數據塊,默認為fastcgi_buffers的兩倍
- fastcgi_temp_file_write_size 128k;
- # 為FastCGI緩存指定一個文件路徑、目錄結構等級、關鍵字區域存儲時間和非活動刪除時間
- #fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
- # 開啟FastCGI緩存並為其設定一個名稱。開啟緩存可以有效降低CPU的負載,並且防止502錯誤的發生。
- # 但是同時也會引起很多問題,要視具體情況而定
- #fastcgi_cache TEST;
- # 用來指定應答代碼的緩存時間,下面三條指令表示將200和303應答緩存1小時,301應答緩存1天,其他應答緩存1分鍾。
- #fastcgi_cache_valid 200 302 1h;
- #fastcgi_cache_valid 301 1d;
- #fastcgi_cache_valid any 1m;
- # 配置Nginx的HttpGzip模塊,開通的前提是安裝的時候啟用了該模塊,使用 /usr/local/nginx/sbin/nginx -V 來查看安裝的信息(大寫的V)
- # 是否開通gzip
- gzip on;
- # 允許壓縮的頁面最小字節數
- gzip_min_length 1k;
- gzip_buffers 416k;
- gzip_http_version 1.1;
- # 壓縮比,從1到9,越大壓縮率越高但越占資源,默認為1
- gzip_comp_level 2;
- # 指定壓縮的類型,text/html總是被壓縮
- gzip_types text/plainapplication/x-javascripttext/cssapplication/xml;
- # 是否讓瀏覽器緩存壓縮過的數據,默認為off
- gzip_vary on;
- # server 用於對虛擬主機的設置,建議每個站點的設置放到外部配置文件中,然后使用include進行引用
- # 這里設置一個默認的主機,當默認訪問的時候返回403錯誤
- server {
- listen 80 default;
- server_name _;
- # 也可以修改成404或者500,根據自身情況進行設置
- return 403;
- }
- # 可以使用include將每個站點的配置引用進來,這樣方便對站點進行管理
- include vhosts/examples.com.conf;
- include vhosts/abc.com.conf;
- }
二、Nginx設置虛擬主機及對PHP的支持
在conf目錄下面創建vhosts目錄,並創建站點的配置文件,這里以examples.com.conf為例。
- [root@localhost ~]# cd /usr/local/nginx/
- [root@localhost nginx]# mkdir -p conf/vhosts
- [root@localhost nginx]# vim conf/vhosts/examples.com.conf
創建的examples.com.conf配置文件如下:
- # 虛擬主機以server進行定義
- server {
- # 監聽的端口,多個端口之間使用空格進行間隔
- listen 80;
- # 用來定義訪問的ip地址或者域名,多個域名之間使用空格分開
- server_name examples.com www.examples.com;
- # 用於指定站點網頁的默認編碼格式
- charset utf-8;
- # 用來指定此站點的訪問日志存放路徑,后面的main用於設定日志的格式
- #access_log logs/examples.com.access.log main;
- # 用於指定站點的網頁根目錄,可以是相對路徑(相對於nginx安裝目錄),也可以是絕對路徑
- #root /www/examples.com
- # 用於指定訪問的默認首頁地址
- #index index.html index.php
- # 用來指定站點默認訪問的設置,里面的root和index用法和效果與上面是一樣的
- # 兩種方式使用任何一種都是可以的,這里采用 location / {} 的方式
- location / {
- root /www/examples.com;
- index index.html index.php;
- }
- # 使用error_page指令設置各種錯誤信息的返回頁面
- # 錯誤信息的返回頁面大小如果低於512k則會被ie瀏覽器替換為ie默認的錯誤頁面
- #error_page 404 /404.html;
- error_page 500 502503504 /50x.html;
- location = /50x.html {
- root html;
- }
- # nginx的location指令用於設置url地址匹配,支持正則表達式匹配,也支持條件判斷匹配。
- # 可以通過location指令實現nginx對動態、靜態網頁的過濾處理。
- # 下面是對所有的圖片設置緩存30天
- location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
- expires 30d;
- }
- # 對js和css文件緩存1小時
- location ~ .*\.(js|css)$ {
- expires 1h;
- }
- # 下面是列出了兩種解析php的方式:
- # 第一種是簡單的將所有以php結尾的請求都交給本機的8080端口進行處理
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1:8080;
- #}
- # 第二種是將php的請求交給FastCGI進程監聽的ip地址及端口,這里轉發給PHP_FPM
- location ~ \.php$ {
- # 設定用於解析php的根目錄,通常為網站根目錄
- root /www/examples.com;
- # 地址和端口與php_fpm中設置的一致
- fastcgi_pass 127.0.0.1:9000;
- # 默認首頁
- fastcgi_index index.php;
- # 指定防止php動態程序的主目錄,也就是$fastcgi_script_name前面指定的路徑,建議與網站根目錄一致或直接使用$document_root
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- # 防止直接訪問 .htaccess 文件,建議開啟
- location ~ /\.ht {
- deny all;
- }
- }