使用者工具

網站工具


linux:web:nginx

Nginx網頁伺服器安裝

通常Linux環境下的網頁伺服器,預設是Apache為主。為了追求高效能及穩定高情況之下,Apache伺服器執行的品質就不是很好,因此俄羅斯的一個軟體公司就開發一款名為 Nginx網頁伺服器。本篇主要介紹LNMP(Linux+Nginx+Mysql+PHP)安裝,以編譯方式來安裝Nginx、MySQL及PHP這三套軟體。

安裝前需的軟體工具

  1. 增加新Repos (ex:HowtoForge)
  2. 下載Gcc,gcc-c++(編譯工具),libjpeg,libjpeg-devel…等等
1
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參數設定。可參考(./configure與cmake差異對照)
    1. 以下幾個常用參數-DCMAKE_INSTALL_PREFIX 指定mysql要安裝在哪個目錄
    2. DMYSQL_DATADIR 指定Mysql資料庫位置
    3. -DMYSQL_TCP_PORT 指定與Mysql伺服器連線所用的阜口。預設是3306
    4. -DMYSQL_UNIX_ADDR 使用UNIX socket file
    5. -DDEFAULT_CHARSET=utf8 指定預設使用UTF8編碼
    6. -DDEFAULT_COLLATION=utf8_general_ci 指定Default collation 編碼
    7. -DEXTRA_CHARSETS=all default is “all”
    8. -DMYSQL_USER=mysql mysql is the default
    9. -DWITH_INNOBASE_STORAGE_ENGINE=1 開啟InnoDB儲存引擎
    10. -DWITH_READLINE 開啟Readline函數庫
    11. -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)

安裝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)' 

參考資料

linux/web/nginx.txt · 上一次變更: 2013/07/06 01:28 (外部編輯)