2015年8月27日 星期四

Ubuntu LAMP 架構轉 LNAMP

Ubuntu LAMP 架構轉 LNAMP


簡述

聽得許多描述: Nginx 處理靜態資料快速又省系統資源; Apache 處理動態 PHP 網頁可靠又效率高, 合併兩者的優點將 Ubuntu LAMP 架構轉 LNAMP 架構也許是高流量動態網頁比較好的選擇。


轉換步驟

將 Nginx 設定為 port 80, Apache 改用8080; Nginx 處理靜態網頁,將動態 PHP 的 request 轉往 Apache 處理。
Ubuntu 的 apache2 設定與之前的有些不同,  Ubuntu 將 apache2 所使用的 ports 定義在 /etc/apache2/ports.conf 這個檔案中; 而每個 ports 應到的 VirtualHost 則定義在 /etc/apache2/sites-enabled/ 之下的設定檔。/etc/apache2/sites-enabled/ 之下的檔案均為 symbolic-link 連結到 ../sites-available/ 之下的同名檔案, 所以要改設定時是要改 /etc/apache2/sites-available/ 之下的檔案; 而要 enable 或 disable 設定時則在 /etc/apache2/sites-enabled/ 之下建立或移除 symblic-links.
根據以上規則, 若要更改 apache2 的預設 port, 就要更動到 /etc/apache2/ports.conf 及 /etc/apache2/sites-available/000-default.conf 兩個檔案。先行對兩個檔案備份再進行以下修改:
修改檔案: /etc/apache2/ports.conf
將檔案中 Listen 80 改為 Listen 8080
修改檔案: /etc/apache2/sites-available/000-default.conf
將 <VirtualHost *:80> 改為 <VirtualHost *:8080>
修改完畢, 重新啟動 apache2
$ sudo service apache2 restart

重新導向 apache2 的 listen port 之後, 接著就安裝 nginx:
$ sudo apt-get update
$ sudo apt-get install nginx -y
Nginx 的安裝過程如下:
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
libjpeg-turbo8 libjpeg8 libtiff5 libvpx1 libxpm4 libxslt1.1 nginx-common
nginx-core
Suggested packages:
libgd-tools fcgiwrap nginx-doc
The following NEW packages will be installed:
fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
libjpeg-turbo8 libjpeg8 libtiff5 libvpx1 libxpm4 libxslt1.1 nginx
nginx-common nginx-core
0 upgraded, 14 newly installed, 0 to remove and 6 not upgraded.
Need to get 2,656 kB of archives.
After this operation, 8,941 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ trusty/main fonts-dejavu-core all 2.34-1ubuntu1 [1,024 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main fontconfig-config all 2.11.0-0ubuntu4.1 [47.4 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main libfontconfig1 i386 2.11.0-0ubuntu4.1 [124 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ trusty/main libjpeg-turbo8 i386 1.3.0-0ubuntu2 [107 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ trusty/main libjpeg8 i386 8c-2ubuntu8 [2,188 B]
Get:6 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main libjbig0 i386 2.0-2ubuntu4.1 [25.1 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main libtiff5 i386 4.0.3-7ubuntu0.3 [142 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu/ trusty/main libvpx1 i386 1.3.0-2 [518 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu/ trusty/main libxpm4 i386 1:3.5.10-1 [38.2 kB]
Get:10 http://us.archive.ubuntu.com/ubuntu/ trusty/main libgd3 i386 2.1.0-3 [142 kB]
Get:11 http://us.archive.ubuntu.com/ubuntu/ trusty/main libxslt1.1 i386 1.1.28-2build1 [140 kB]
Get:12 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main nginx-common all 1.4.6-1ubuntu3.3 [18.1 kB]
Get:13 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main nginx-core i386 1.4.6-1ubuntu3.3 [322 kB]
Get:14 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main nginx all 1.4.6-1ubuntu3.3 [5,452 B]
Fetched 2,656 kB in 7s (333 kB/s)
Selecting previously unselected package fonts-dejavu-core.
(Reading database ... 87692 files and directories currently installed.)
Preparing to unpack .../fonts-dejavu-core_2.34-1ubuntu1_all.deb ...
Unpacking fonts-dejavu-core (2.34-1ubuntu1) ...
Selecting previously unselected package fontconfig-config.
Preparing to unpack .../fontconfig-config_2.11.0-0ubuntu4.1_all.deb ...
Unpacking fontconfig-config (2.11.0-0ubuntu4.1) ...
Selecting previously unselected package libfontconfig1:i386.
Preparing to unpack .../libfontconfig1_2.11.0-0ubuntu4.1_i386.deb ...
Unpacking libfontconfig1:i386 (2.11.0-0ubuntu4.1) ...
Selecting previously unselected package libjpeg-turbo8:i386.
Preparing to unpack .../libjpeg-turbo8_1.3.0-0ubuntu2_i386.deb ...
Unpacking libjpeg-turbo8:i386 (1.3.0-0ubuntu2) ...
Selecting previously unselected package libjpeg8:i386.
Preparing to unpack .../libjpeg8_8c-2ubuntu8_i386.deb ...
Unpacking libjpeg8:i386 (8c-2ubuntu8) ...
Selecting previously unselected package libjbig0:i386.
Preparing to unpack .../libjbig0_2.0-2ubuntu4.1_i386.deb ...
Unpacking libjbig0:i386 (2.0-2ubuntu4.1) ...
Selecting previously unselected package libtiff5:i386.
Preparing to unpack .../libtiff5_4.0.3-7ubuntu0.3_i386.deb ...
Unpacking libtiff5:i386 (4.0.3-7ubuntu0.3) ...
Selecting previously unselected package libvpx1:i386.
Preparing to unpack .../libvpx1_1.3.0-2_i386.deb ...
Unpacking libvpx1:i386 (1.3.0-2) ...
Selecting previously unselected package libxpm4:i386.
Preparing to unpack .../libxpm4_1%3a3.5.10-1_i386.deb ...
Unpacking libxpm4:i386 (1:3.5.10-1) ...
Selecting previously unselected package libgd3:i386.
Preparing to unpack .../libgd3_2.1.0-3_i386.deb ...
Unpacking libgd3:i386 (2.1.0-3) ...
Selecting previously unselected package libxslt1.1:i386.
Preparing to unpack .../libxslt1.1_1.1.28-2build1_i386.deb ...
Unpacking libxslt1.1:i386 (1.1.28-2build1) ...
Selecting previously unselected package nginx-common.
Preparing to unpack .../nginx-common_1.4.6-1ubuntu3.3_all.deb ...
Unpacking nginx-common (1.4.6-1ubuntu3.3) ...
Selecting previously unselected package nginx-core.
Preparing to unpack .../nginx-core_1.4.6-1ubuntu3.3_i386.deb ...
Unpacking nginx-core (1.4.6-1ubuntu3.3) ...
Selecting previously unselected package nginx.
Preparing to unpack .../nginx_1.4.6-1ubuntu3.3_all.deb ...
Unpacking nginx (1.4.6-1ubuntu3.3) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up fonts-dejavu-core (2.34-1ubuntu1) ...
Setting up fontconfig-config (2.11.0-0ubuntu4.1) ...
Setting up libfontconfig1:i386 (2.11.0-0ubuntu4.1) ...
Setting up libjpeg-turbo8:i386 (1.3.0-0ubuntu2) ...
Setting up libjpeg8:i386 (8c-2ubuntu8) ...
Setting up libjbig0:i386 (2.0-2ubuntu4.1) ...
Setting up libtiff5:i386 (4.0.3-7ubuntu0.3) ...
Setting up libvpx1:i386 (1.3.0-2) ...
Setting up libxpm4:i386 (1:3.5.10-1) ...
Setting up libgd3:i386 (2.1.0-3) ...
Setting up libxslt1.1:i386 (1.1.28-2build1) ...
Setting up nginx-common (1.4.6-1ubuntu3.3) ...
Processing triggers for ufw (0.34~rc-0ubuntu2) ...
Processing triggers for ureadahead (0.100.0-16) ...
Setting up nginx-core (1.4.6-1ubuntu3.3) ...
Setting up nginx (1.4.6-1ubuntu3.3) ...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
查看 Nginx 預設啟動的程序:
$ ps aux | grep nginx
root      5521  0.0  0.5  14908  2552 ?        Ss   01:03   0:00 nginx: master process /usr/sbin/nginx
www-data  5522  0.0  0.5  15052  2836 ?        S    01:03   0:00 nginx: worker process
www-data  5523  0.0  0.7  15052  3704 ?        S    01:03   0:00 nginx: worker process
www-data  5524  0.0  0.5  15052  2836 ?        S    01:03   0:00 nginx: worker process
www-data  5525  0.0  0.5  15052  2836 ?        S    01:03   0:00 nginx: worker process

修改 Nginx 的設定檔, 設定啟始路徑及設定 .php 導向 apache
修改檔案: /etc/nginx/sites-available/default, 更改 root 位置並增加 index.php 索引檔:
root /var/www/html;
index index.php index.html index.htm;

接著在原來的 location 設定之下新增以下設定, 啟用 php 轉址並轉達原 Host 和 真實 IP 資料
location ~ .php$ {
    proxy_pass  http://localhost:8080;
    include proxy_params; 
    # proxy_set_header Host $http_host;
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header X-Forwarded-Proto $scheme;
}
設定完後重新啟動 nginx:
$ sudo /etc/init.d/nginx restart 或
$ sudo service nginx restart
完成之後, 基本上外部連接 httpd 的通道就由 Nginx 接管, 且當有 .php 的請求時就會自動導向給 apache 處理!

沒有留言:

張貼留言