• 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
What's Hot

机械模具加工公司网站设计案例

24 10 月, 2023

快速原型公司案例

24 10 月, 2023

陶瓷加工网站案例

24 10 月, 2023
Facebook Twitter Instagram
  • 中文
  • English
Facebook Twitter Instagram
VPSEO VPSEO
  • 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
VPSEO VPSEO
Home»服务器运维»無堅不摧,唯快不破!快改用 Nginx + PHP-FPM 取代 Apache 吧!
服务器运维

無堅不摧,唯快不破!快改用 Nginx + PHP-FPM 取代 Apache 吧!

chrispengcnBy chrispengcn7 8 月, 2021没有评论2 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Share
Facebook Twitter LinkedIn Pinterest Email

Nginx + PHP-FPM (FastCGI Process Manager)

太多人詬病於 Apache Server 的效能與承載數,紛紛投向 Event-based Server 的懷抱。而近年來 Nginx 蠻紅的 (Nginx 唸 Engine X),Nginx 主要是藉由 Non-blocking 與 epool (linux 2.6 支援) 這些特性,大幅提昇了連線服務量與速度。

但是 Nginx 本身只是單純的 HTTP Server,如果需要執行程式,還得藉助 CGI 的幫忙。我們今天要教學的架構就是將最常使用的 Apache + PHP 改為 Nginx + PHP-FPM,示範的作業系統為 Ubuntu Server。

安裝 Nginx 與 PHP-FPM (傳說中的 LNMP)

CentOS 6.5 沒有內建 Nginx,需透過 EPEL 進行安裝,命令如下:

sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum install nginx php php-fpm

Ubuntu Server 安裝起來就簡單多了,直接透過 apt 安裝套件,命令如下:

sudo apt-get update

sudo apt-get install nginx nginx-extras php5 php5-fpm

設定 Nginx

順利安裝完之後開始修改 Nginx Server 設定檔,如下:

sudo vim /etc/nginx/nginx.conf
介紹幾個重要的參數:
  • user:Nginx Server 啟動所使用的使用者 (ubuntu 預設用 www-data,CentOS 預設用 nginx)
  • pid:ProcessID 存放位置 (CentOS 預設在 /var/run/nginx.pid)
  • worker_processes:開啟的程序數量,請對應 CPU 核心數進行調整(多設無益)
  • worker_cpu_affinity:每個程序所使用的邏輯核心,所以四核可以這樣設「0001 0010 0100 1000」,當然也可以一次設定兩個核心給同一個程序
  • worker_rlimit_nofile:每個程序最高可以開啟的檔案數
  • use epoll:啟動 epoll 會快很多,效果不錯
  • worker_connections:每個程序最高可以開啟的連線數
  • access_log, error_log:HTTP Log 存放的位置

接下來設定 Nginx Virtual Host,Ubuntu 請編輯以下檔案:

sudo vim /etc/nginx/sites-available/default

CentOS 則是存放在以下路徑:

sudo vim /etc/nginx/conf.d/default.conf

 

user www-data;

worker_processes 4;

worker_cpu_affinity 0001 0010 0100 1000;

worker_rlimit_nofile 1024;

pid /run/nginx.pid;




events {
    use epoll;
    worker_connections 2048;
}


http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_names_hash_bucket_size 128;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    client_header_buffer_size 2k;
   large_client_header_buffers 4 4k;
    open_file_cache max=102400 inactive=20s;
      access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

先說明幾個主要的參數設定:

  • server_name:同 Apache ServerName 可以用來指定 Virtual Host (虛擬主機)
  • root:網頁起始位置
  • server_tokens off:移除 Nginx 版本資訊

中間的「location /」Selection 用「try_files $uri $uri/ /index.php;」來嘗試讀取開啟,如果檔案不存在就轉為呼叫 index.php,做的事情與常用的 Apache Rewrite Module 差不多,這樣設計主要是為了將 Request 導給 Framework (例如 Codeigniter, Zend Framework 等等)。

最後的「location ~* .php$」Selection 就是設定要將 .php 檔案直接交由 FPM 來處理,詳細的設定說明可以參考 Nginx WIKI。fastcgi_pass 所指向的位置是 PHP-FPM 所開啟的服務,接者我們繼續設定 PHP-FPM。

設定 PHP-FPM

Ubuntu 請編輯 /etc/php5/fpm/pool.d/www.conf 檔案

sudo vim /etc/php5/fpm/pool.d/www.conf

CentOS 則放在 /etc/php-fpm.d/www.conf

sudo vim /etc/php-fpm.d/www.conf

編輯內容如下:


[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
listen.backlog = 65535
listen.owner = www-data
listen.group = www-data


request_terminate_timeout = 600s
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

上述的 listen 就是要讓前面 Nginx fastcgi_pass 來呼叫的服務,可以透過 TCP Socket 或者是 UNIX Kernel Socket,Kernel Socket 速度會比較快,但是經過壓力測試後 Kernel Socket 反而常常會掉包,穩定性不如 TCP Socket 來的優異。其中 request_terminate_timeout 設定也相當重要,表示 PHP 的執行時間,超過這個週期就會結束,設太短常常遇到檔案上傳時間比較久就 GG 了。

最後當然要啟動 Nginx 與 PHP-FPM 服務,如下:

sudo service php-fpm restart
sudo service nginx restart

成功後快開啟瀏覽器試看看吧,我在 CentOS 裝起來的 Nginx Welcome 畫面如下:

nginx-welcome

感想

Nginx 整體來說安裝是蠻容易的,但要調校的好又是另外一件事了,如果設定的不洽當,在高流量時 Nginx 常會送你 502 Bad Gateway。剛開始花蠻多時間嘗試調整參數,搭配效能測試工具來調整,讓伺服器發揮最大效用。

最前面 Ubuntu 有多裝了 nginx-extras 套件,其實是用來擴充 Nginx 功能,如同 Apache Module,例如可以透過 more_clear_headers 設定來移除一些不必要的 HTTP Header 資訊。像是透過以下參數就可以移除 HTTP Response Header 中 Nginx 與 PHP 的版本資訊。

more_clear_headers 'Server';

more_clear_headers 'X-Powered-By';

 

無堅不摧,唯快不破!快改用 Nginx + PHP-FPM 取代 Apache 吧!

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
chrispengcn
  • Website

Related Posts

docker下如何部署 varnish ?

26 6 月, 2023

windows2012 core的启用和图形界面的启用

25 12 月, 2021

配置Nginx反向代理FRPS服务端口

7 8 月, 2021

centos7 dns 设置

7 8 月, 2021
Add A Comment

Leave A Reply Cancel Reply

*

code

导航
  • 首页
  • 关于我们
  • 服务项目
  • 项目案例
  • 博客文章
  • 联系我们
博客
  • 服务器运维
  • 服务器安装
  • nginx
  • PHP
  • WordPress
  • Python
  • Javascript
  • SEO
  • 电子商务
  • 大数据采集
  • 宝塔面板
  • 数据库
  • 电子商务
  • 虚拟化
  • 阿里云
导航
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们
最新文章
  • 机械模具加工公司网站设计案例
  • 快速原型公司案例
  • 陶瓷加工网站案例
  • CNC数控加工日文网站案例
  • 触摸一体机数字标牌厂家网站案例
关于我们
关于我们

广州纬来科技有限公司
联系地址:广东省广州市番禺区富华中路富源二街18号合和大厦809

QQ : 13602156
Email : 13926026058@139.com
Contact: +86 13926026058

Facebook Twitter YouTube LinkedIn
© 2025 广州纬来科技有限公司 粤ICP备2023105857号-2
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们

Type above and press Enter to search. Press Esc to cancel.