======Nginx網頁伺服器安裝======
通常Linux環境下的網頁伺服器,預設是Apache為主。為了追求高效能及穩定高情況之下,Apache伺服器執行的品質就不是很好,因此俄羅斯的一個軟體公司就開發一款名為
[[wp>nginx|Nginx]]網頁伺服器。本篇主要介紹LNMP(Linux+Nginx+Mysql+PHP)安裝,以編譯方式來安裝Nginx、MySQL及PHP這三套軟體。
=====安裝前需的軟體工具=====
- 增加新Repos (ex:[[http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-on-centos-6.0|HowtoForge]])
- 下載Gcc,gcc-c++(編譯工具),libjpeg,libjpeg-devel...等等
sudo bash
LANG=C
yum install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
=====MySQL安裝=====
* 安裝前先檢查,確定有bison及cmake這兩個套件
rpm -qa|egrep '(bison|cmake)'
* 解壓縮 mysql-5.5.16.tar.gz後,執行cmake參數設定。可參考([[http://forge.mysql.com/wiki/Autotools_to_CMake_Transition_Guide|./configure與cmake差異對照]])
- 以下幾個常用參數-DCMAKE_INSTALL_PREFIX **指定mysql要安裝在哪個目錄**
- DMYSQL_DATADIR **指定Mysql資料庫位置**
- -DMYSQL_TCP_PORT **指定與Mysql伺服器連線所用的阜口。預設是3306**
- -DMYSQL_UNIX_ADDR **使用UNIX socket file**
- -DDEFAULT_CHARSET=utf8 **指定預設使用UTF8編碼**
- -DDEFAULT_COLLATION=utf8_general_ci **指定Default collation 編碼**
- -DEXTRA_CHARSETS=all **default is "all"**
- -DMYSQL_USER=mysql **mysql is the default**
- -DWITH_INNOBASE_STORAGE_ENGINE=1 **開啟InnoDB儲存引擎**
- -DWITH_READLINE **開啟Readline函數庫**
- -DWITH_SSL=system **開啟SSL library**
[root@yao88 src]#tar zxvf mysql-5.5.16.tar.gz
[root@yao88 mysql-5.5.16]#cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
* 開始編譯及安裝
[root@yao88 mysql-5.5.16]#make
[root@yao88 mysql-5.5.16]#make install
* 建立系統帳號使用者集群組,並改變/usr/local/mysql權限
#groupadd mysql
#useradd -s /bin/nologin -r -g mysql mysql
#cd /usr/local/mysql
#chown -R mysql .
#chgrp -R mysql .
* 新增Mysql資料庫,指定以使用者mysql帳號登入
#/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
(此資料庫會建立在 /var/lib/mysql)
* 複製mysql設定檔、啟動檔及Binary檔
#cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
#cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#ln -s /usr/local/mysql/bin/mysql /bin/mysql
* 測試看看!啟動mysql伺服器
#/etc/init.d/mysqld start
=====PHP安裝(包含FastCGI)=====
- [[http://tw2.php.net/get/php-5.3.8.tar.bz2/from/tw.php.net/mirror|php-5.3.8套件版本]]
- 安裝php前,所需套件
* [[http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.14.tar.gz|libiconv-1.14]]
* [[http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz|libmcrypt-2.5.8]]
* [[http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz|mhash-0.9.9.9]]
* [[http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz|mcrypt-2.6.8 ]]
=====安裝php前 所需套件====
* libiconv-1.13.1
# cd libiconv-1.13.1/
#./configure
#make
#make install
* libmcrypt-2.5.8
#cd libmcrypt-2.5.8/
#./configure
#make
#make install
#ldconfig
#cd libltdl/
#./configure --enable-ltdl-install
#make
#make install
* mhash-0.9.9.9
#cd mhash-0.9.9.9/
#./configure
#make
#make install
* mcrypt-2.6.8
連結libmcrypt及mhash相關函數到 /usr/lib64/ (本文實作於64位元;若是32位元是在/usr/lib/)
#ln -s /usr/local/lib/libmcrypt.la /usr/lib64/libmcrypt.la
#ln -s /usr/local/lib/libmcrypt.so /usr/lib64/libmcrypt.so
#ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
#ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
#ln -s /usr/local/lib/libmhash.a /usr/lib64/libmhash.a
#ln -s /usr/local/lib/libmhash.la /usr/lib64/libmhash.la
#ln -s /usr/local/lib/libmhash.so /usr/lib64/libmhash.so
#ln -s /usr/local/lib/libmhash.so.2 /usr/lib64/libmhash.so.2
#ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
#ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
#cd mcrypt-2.6.8
#./configure
#make
#make install
* 增加mysql相關函式庫到 /usr/lib64/mysql(本文實作於64位元;若是32位元是在/usr/lib/mysql/)
#ln -s /usr/local/mysql/lib/libmysqlclient.a /usr/lib64/mysql/libmysqlclient.a
#ln -s /usr/local/mysql/lib/libmysqlclient_r.a /usr/lib64/mysql/libmysqlclient_r.a
#ln -s /usr/local/mysql/lib/libmysqlclient_r.so /usr/lib64/mysql/libmysqlclient_r.so
#ln -s /usr/local/mysql/lib/libmysqlclient_r.so.18 /usr/lib64/mysql/libmysqlclient_r.so.18
#ln -s /usr/local/mysql/lib/libmysqlclient_r.so.18.0.0 /usr/lib64/mysql/libmysqlclient_r.so.18.0.0
#ln -s /usr/local/mysql/lib/libmysqlclient.so /usr/lib64/mysql/libmysqlclient.so
#ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/mysql/libmysqlclient.so.18
#ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/mysql/libmysqlclient.so.18.0.0
#ln -s /usr/local/mysql/lib/libmysqld.a /usr/lib64/mysql/libmysqld.a
#ln -s /usr/local/mysql/lib/libmysqlservices.a /usr/lib64/mysql/libmysqlservices.a
#ln -s /usr/local/mysql/lib/plugin/ /usr/lib64/mysql/plugin
*開始編譯PHP主程式
php5.3.3版本之後,php-fpm模組已經包含在原始碼中了,不必透過patch再執行編譯。
#cd php-5.3.8
#./configure --prefix=/usr/local/php \ (指php安裝目錄)
-> --with-config-file-path=/usr/local/php/etc \ (指php設定檔安裝位置)
-> --with-mysql=/usr/local/mysql \ (指mysql安裝的地方)
-> --with-mysqli=/usr/local/mysql/bin/mysql_config \ (指 mysqli 資料庫連線執行檔)
-> --with-iconv-dir=/usr/local \ (打開文字編碼自符集間的轉換)
-> --with-freetype-dir \ (打開對freetype字體庫的支持)
-> --with-jpeg-dir \ (打開jpeg圖片的支持)
-> --with-png-dir \ (打開png圖片的支持)
-> --with-zlib \ (zlib庫的支持)
-> -with-curl \ (curl瀏覽工具的支持)
-> --with-curlwrappers \(curl工具打開url流)
-> --with-libXML-dir \ (xml函式庫支持)
-> --enable-xml \ (允許xml函式庫)
-> --disable-rpath \ ( 關閉額外的運行庫文件)
-> --enable-safe-mode \ (打開安全模式)
-> --enable-bcmath \ (圖片大小調整)
-> --enable-shmop \
-> --enable-sysvsem \
-> --enable-fpm \ (允許php-fpm)
-> --enable-fastcgi \ (支持fastcgi方式啟動PHP)
-> --enable-force-cgi-redirect \
-> --enable-inline-optimization \
-> --enable-mbregex \
-> --enable-mbstring \ (多字節,字符串的支持)
-> --with-mcrypt \ (mcrypt 演算法)
-> --with-gd \ (gd圖形)
-> --enable-gd-native-ttf \ (支持TrueType字符串函數庫)
-> --with-openssl \ (安全 ssl)
-> --with-mhash \ (mhash 演算法)
-> --enable-pcntl \ (連結mysql用到的)
-> --enable-sockets \(打開復口支持)
-> --with-ldap \ (ldap支持)
-> --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap
#make
#make install
=====Nginx安裝=====
* 先確定系統是否安裝pcre函式庫套件#rpm -qi pcre
* 承第一項,若沒有pcre函式庫就安裝它#yum -y install pcre
* 編譯安裝Nginx#./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
# make && make install
* 新增使用者及群組名為www(系統帳號)#useradd -s /sbin/nologin -d /usr/local/nginx/html -r www
* 複製php-fpm及nginx啟動檔#cp -a /usr/local/php/sbin/php-fpm /etc/init.d/php-fpm
#cp -a /usr/local/nginx/sbin/nginx /etc/init.d/nginx
* 修改nginx設定檔#vim /usr/local/nginx/conf/nginx.conf
user www; #剛新增系統帳號
worker_processes 5;
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log /usr/local/nginx/logs/error.log info;
pid /usr/local/nginx/logs/nginx.pid; #nginx啟動時,會給定一個程序ID
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80; #Web server Port
server_name andy; #主機名稱
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000; #執行 *.php 程式所使用的Port
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
* 啟動 nginx及php-fpm服務及檢查服務的PORT是否有啟動#/etc/init.d/nginx
#/etc/init.d/php-fpm
#netstat -tulnp|egrep '(80|9000)'
=====參考資料=====
* [[http://blog.s135.com/nginx_php_v6/| Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web服務器]]
* [[http://goodtool.blogspot.com/2011/08/mysql-5515.html|MySQL 5.5.15 原始碼 安裝 ]]
* [[http://hi.baidu.com/emryslu/blog/item/b6e40bfeb46748e7fd037fd8.html|編譯安裝 mysql5.5]]
* [[http://huangyu.blog.51cto.com/1021686/288093|php編譯參數解釋]]
* [[http://netkiller.sourceforge.net/zh-tw/freebsd/php-fpm.html|編譯安裝 php 與 php-fpm]]
* [[http://wiki.nginx.org/NginxChs#.E4.B8.BB.E8.A6.81.E6.96.87.E6.A1.A3|Cn_Nginx_wiki]]
* [[http://www.thismail.org/bbs/thread-3002-1-1.html|nginx 上設定可執行 perl cgi 環境的過程]]
* [[http://www.howtocn.org/nginx|Nginx How to(中文)]]
* [[http://blog.luwenju.com/99.html|Nginx支持CGI]]
* [[http://www.reistlin.com/blog/301|Nginx Http Proxy 代理服務器配置]]