自從學習 Linux 以來都是使用 Apache 來當 Web Server,Apache 確實非常的方便,也很容易上手運用廣泛
由於新工作採用 Nginx 來部屬大訪問量,以及常常在書籍中看到 Nginx 這款輕量級 Web 的種種好處,花了一些時間研究了 Nginx
在 Linux,Nginx採用異步處理 I/O 的 epoll / Kqueue 在處理大量訪問的時候,Nginx 耗費的資源少而且處理速度快!
而 Apache 適合在處理系統,使用的是 select 機制,屬於比較舊型的處理方式,基於底層目前 Apache 還未針對這個方向做改進
Nginx 還有一個好處就是,大家通常都會拿它來當 Reverse Proxy Server ,簡直就是碰到就蹦得出來的快
目前 Apache 可以佔有的優勢就是用的人多,文件多; 其他 Nginx 還是大勝許多。
在這裡拿 wordpress 當範例,因為他是標準 LNMP 的架構,也適合在多數環境中使用
此篇主要會是將原有的 LAMP 的架構改為 LNMP 為主
詳細的 WordPress 設定可以參考另一篇 WordPress 部落格 架設
安裝 LNMP 架構環境
step1. 安裝套件
要安裝 Nginx 必須要擁有 EPEL
$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ yum install mysql mysql-server php php-mysql php-fpm nginx
step2. 設定 /etc/nginx/nginx.conf
user nginx; worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 1024; events { use epoll; worker_connections 1024; }
- user : Nginx 執行的使用者權限
- worker_processes : 可執行的程序數量,就是 CPU core
- worker_cpu_affinity : processes 的 core 執行邏輯,4 核心可設定 1000 0100 0010 0001
- worker_rlimit_nofile : 每個程序可開啟的最多檔案數量
- use epoll : 這就是 Nginx 最強的東西,開了飛快!
- worker_connections : 每個程序最多連線數
step3. 設定 /etc/nginx/conf.d/default.conf
其實 Nginx 設定非常的簡單,但跟 Apache 不同的概念是若要執行程式還是要透過 fastcgi,在這邊就是要跟 php-fpm 來進行 cgi 串接
server { listen 80; server_name shazi.twbbs.org; root /usr/share/nginx/wordpress; index index.html index.php index.htm; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server_tokens off; location / { root /home/wordpress/; index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~* \.php$ { try_files $uri = 404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- server_name : VirtualHost 名稱
- root : Web 位置
- server_tokens : 移除版本資訊
- location ~* \.php$ : 代表所有 .php 都交由 php-fpm 處理
在這邊必須先提醒各位,php-fpm 可以 Listen TCP Socket 或者是 UNIX Kernel Socket,效能上多數都是採用 UNIX Kernel Socket
step4. 設定 php-fpm,/etc/php-fpm.d/www.conf
處理好 nginx 的 fastcgi 連線,就要設定 php-fpm 的串接設定
[www] listen = /var/run/php-fpm/php-fpm.sock user = nginx group = nginx request_terminate_timeout = 600s
- listen : 預設是 127.0.0.1:9000 , 但採用 UNIX Kernel Socket 比較快
- request_terminate_timeout : 有關於 php 可以執行最久的時間,超過就 timeout
step5. 將 wordpress 程式放入 root 路徑
$ mv wordpress /usr/share/nginx/ $ chown -R nginx.nginx /usr/share/nginx/wordpress
step6. 啟動服務
$ service nginx start $ service php-fpm start
看到 WordPress 畫面就 OK 囉!!
雖然 Nginx 非常簡單,但更代表必須花更多心思進行調校。