CentOS安裝與配置LNMP

本文PDF文檔下載:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.pdfjavascript

本文EPUB文檔下載:http://www.coderblog.cn/doc/Install_and_config_LNMP_under_CentOS.epubphp

原文連接:http://www.coderblog.cn/article/36/css

CentOS安裝與配置LNMP(1):Nginx安裝與經常使用命令

Nginx是一個輕量級的HTTP服務器,與龐大的Apache相比有如下優點,在性能上,它戰用不多的系統資源,能支持更多的併發鏈接,達到更高的訪問效率;在功能上,Nginx是優秀的代理服務器和負載均衡服務器;在安裝配置上,Nginx安裝簡單、配置靈活。而CentOS又是最經常使用的網站服務器的Linux系統,本文將介紹購買VPS主機或者雲主機後,如何在純淨系統下安裝與配置Nginx。html

1、安裝環境

  • 操做系統:CentOS
  • 安裝軟件:Nginx 1.6.0
  • 安裝方式: yum
  • 安裝說明:如下操做如無特別說明,請在root用戶或者具備root權限的用戶下執行

2、安裝

通常CentOS系統的yum軟件源中,都沒有含有Nginx軟件,故咱們須要導入額外的yum軟件源。java

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpmmysql

yum install nginxlinux

安裝後的文件列表nginx

  • 自啓動腳本文件: /etc/init.d/nginx
  • 主程序文件: /usr/sbin/nginx
  • 配置文件目錄: /etc/nginx/
  • 主配置文件: /etc/nginx/nginx.conf
  • 各站點的配置文件 /etc/nginx/conf.d/*.conf
  • 日誌文件目錄:/var/log/nginx/
  • 訪問日誌:/var/log/nginx/access.log
  • 錯誤日誌:/var/log/nginx/error.log

3、程序啓動

/etc/init.d/nginx startweb

Or正則表達式

/etc/init.d/nginx restart

若是你看到如下結果,表示Nginx程序已經成功啓動了

Starting nginx: [ OK ]

4、查看網站

通常網站服務器都沒有提供圖形化的界面,故咱們須要經過遠程在查看服務器上的網站,首先,得到網站服務器的IP。

ifconfig

而後咱們就能夠在瀏覽器裏,輸入http://服務器的IP/來查看咱們的網站,若是你看到如下的結果,那麼恭喜了,你的網站已經可以正常訪問了

Nginx Welcome Page

5、Nginx的經常使用命令

  • 查看Nginx版本:nginx -v
  • 測試配置文件是否正確: nginx -t
  • 測試特定配置文件是否正確: nginx -t -c *filepath*
  • 啓動/中止/從新啓動

/etc/init.d/nginx start

/etc/init.d/nginx stop

/etc/init.d/nginx restart

  • 修改配置文件後,不啓動從新載入配置:nginx -s reload

6、故障排除

若是你的網站沒法正常訪問,請按如下步驟檢查:

一、查看80端口是否已被Nginx使用

netstat -tlunp Or netstat -tlunp|grep :80

若是有如下內容,則Nginx程序已正常監聽80端口

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 573/nginx

二、查看網站在本地是否可以訪問

curl http://localhost/ 若是返回Nginx歡迎頁的HTML代碼則正常

三、80端口被系統阻止外部訪問

方法一:停用iptables服務

iptables stop

chkconfig iptables off

方法二:開通80端口的外部訪問

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

/etc/init.d/iptables save

四、查看錯誤日誌文件

more /var/log/nginx/error.log

CentOS安裝與配置LNMP(2):Nginx優化

在簡單地安裝完Nginx後,須要對其進行配置,如配置網站的文件路徑,多網站共享同一端口,與PHP的結合,還有對其進行優化。

1、主配置文件

nginx的主配置文件路徑:/etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  • user nginx; 運行nginx程序的用戶
  • worker_processes 1; worker進程的個數,建議修改成和CPU的核數同樣的數量,如4核CPU,則修改成4
  • error_log /var/log/nginx/error.log warn; 錯誤日誌的文件路徑與記錄的日誌類型
  • pid /var/run/nginx.pid; 存放Nginx進程號的文件,之後可經過此文件向Nginx發送信息,如 kill -HUP `cat /var/run/nginx.pid`
  • worker_connections 1024; worker支持的併發量,須要支持高併發量的服務器,可修改此值爲65536,此修改必須與linux的內核配合才能發揮做用;
  • include /etc/nginx/mime.types; 設定mime類型,類型由mime.type文件定義
  • 定義日誌格式,格式名稱命令爲main:

 

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

各字段意義以下:
$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;
$remote_user:用來記錄客戶端用戶名稱;
$time_local: 用來記錄訪問時間與時區;
$request: 用來記錄請求的url與http協議;
$status: 用來記錄請求狀態;成功是200,
$body_bytes_sent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從那個頁面連接訪問過來的;
$http_user_agent:記錄客戶端瀏覽器的相關信息;
  • access_log /var/log/nginx/access.log main;日誌文件路徑,main爲剛纔定義的日誌格式名稱
  • sendfile on; sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime。
  • keepalive_timeout 65; keepalive的超時時間
  • include /etc/nginx/conf.d/*.conf; 此句是包含/etc/nginx/conf.d/目錄下的.conf文件做爲配置文件的內容

2、主配置文件的一些額外設置

一、打開gzip

通常服務器的配置都比較強大,而網絡帶寬都比較小,利用gzip功能,在發送網頁內將網頁內容進行壓縮,客戶端瀏覽器在收到文件名,再進行解壓縮,這樣能夠節省大量的網絡帶寬。 在主配置文件中加入如下選項:

gzip  on;  #打開gzip
gzip_min_length 1k;  #內容大小小於1KB的將不壓縮,由於可能越壓越大
gzip_buffers 4 16k;  #gzip緩存設置系統獲取4個16KB單位的緩存用於存儲gzip的壓縮結果數據流
#gzip_http_version 1.0;
gzip_comp_level 2;   #壓縮級別
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php; #須要進行壓縮的MIME TYPE
gzip_vary off;
gzip_disable "MSIE [1-6]\."; #對於IE6如下的瀏覽器,不進行壓縮

二、提升文件上傳的大小

Nginx默認的可上傳文件在大小隻有1M,這遠遠不能知足咱們的需求,所以可加入如下選項以提升上傳文件大小。

client_max_body_size 10m;

3、網站配置文件路徑

Nginx的各網站配置文件存放在/etc/nginx/conf.d/目錄下,每一個.conf文件表明每個獨立的網站,咱們來看一個經典的conf文件的結構,即/etc/nginx/conf.d/default.conf文件:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #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   /usr/share/nginx/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;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$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;
    #}
}

咱們獨個解讀一下

  • 全部配置必須包括在server{}
  • listen 80 ; 監聽80端口
  • server_name localhost; 經過網址名稱與其它網站區分開,此處應該修改成你的申請的域名網址,多個網址請用空格分開,如:server_name www.coderblog.cn coderblog.cn;,另外,這裏的網址也能夠是正則表達式的形式,如server_name (www\.)?coderblog.cn;
  • charset koi8-r; 文件編碼,通常設置爲charset utf-8;
  • access_log /var/log/nginx/log/host.access.log main; 訪問日誌的文件路徑與須要記錄的日誌類型,main爲nginx.conf定義的日誌格式

  • 網站文件的存放路徑,以及默認的文檔名稱,如,你訪問http://www.coderblog.cn/,實際是訪問http://www.coderblog.cn/index.htm

 

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}
  • error_page 404 /404.html; 當文件沒有找到時,重定位到/404.html文件

  • 當發生 500 502 503 504錯誤時,重定位到/50x.html文件

 

error_page   500 502 503 504  /50x.html;
location = /50x.html {
   root   /usr/share/nginx/html;
}
  • 配置某些文件禁止訪問

 

location ~ /\.ht {
    deny  all;
}

4、修改配置後可能發生的錯誤

修改配置文件後,可用nginx -t測試配置文件的正確性,以及須要用nginx -s reload從新載入配置文件。

一、修改文件路徑後,訪問時發生403 Forbidden錯誤

可能緣由1:缺乏默認文檔文件,如root目錄下缺乏index.html index.htm以及任何一個默認文檔文件,你那麼你直接訪問網站域名的時候,將發生403 Forbidden錯誤; 解決方法:添加至少一個默認文檔到root目錄下

可能緣由2:nginx用戶在root目錄下沒有讀權限,例如將root目錄設置爲/home/homeway,而該目錄的權限爲drwx------,即除了homeway用戶外,其它用戶沒有讀寫權限。 解決方法:將root目錄權限修改成777,即任何人可讀可寫可執行,執行命令 chmod 777 /home/homeway -R便可

5、多網站共用80端口

Nginx實現多網站共用80端口其實很簡單,只要設置server_name屬性便可;如:我有兩個網站forum.coderblog.cn與blog.coderblog.cn,那麼,我只須要在/etc/nginx/conf.d/下新增兩個文件 /etc/nginx/conf.d/forum.coderblog.cn.conf

listen       80;
server_name  forum.coderblog.cn;

/etc/nginx/conf.d/blog.coderblog.cn.conf

listen       80;
server_name  blog.coderblog.cn;

好了,本文就先講到這裏,下一篇將講NGINX與PHP結合。

CentOS安裝與配置LNMP(3):Nginx與PHP結合

PHP能夠說是目前最流行的網站首選語言,以前兩篇文章已經講了若是在CentOS環境下搭建與優化Nginx環境,本篇文章將講述PHP在CentOS下的安裝,並結合Spawn-fcgi與Nginx進行組合使用。

1、PHP在CentOS下的安裝

截至目前爲止,PHP最新版本爲5.6.0,但實際生產環境中,PHP 5.3.3已經可以知足大部分程序的需求,運行比較穩定且擴展模塊比較多,故推薦安裝PHP 5.3.3版本。

  • 操做系統:CentOS
  • 安裝軟件:PHP 5.3.3
  • 安裝方式: yum
  • 安裝說明:如下操做如無特別說明,請在root用戶或者具備root權限的用戶下執行

2、安裝

rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm

yum install php php-mysql php-gd php-gd php-mcrypt php-xml php-xcache php-mbstring

安裝後的文件列表

  • 配置文件 /etc/php.ini
  • 程序文件 /usr/bin/php-cgi,使用php-cgi -b port的形式便可讓其監聽某一端口,但通常不推薦以此種方式運行

3、使用spawn-fcgi管理php進程

spawn-fcgi是lightpd中的一個組件,可單獨使用,請使用如下命令進行安裝

wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2
tar -xvjf lighttpd-1.4.18.tar.bz2
cd lighttpd-1.4.18
./configure
make
make install

經常使用命令:

spawn-fcgi -C 5 -u nginx -g nginx -f /usr/bin/php-cgi -a 127.0.0.1 -p 9000

參數解釋:

  • -C 5 啓動5個PHP進程進行處理
  • -u nginx -g nginx 以用戶nginx及用戶組nginx運行php
  • -f /usr/bin/php-cgi 指定php-cgi的文件路徑
  • -a 127.0.0.1 -p 9000 監聽的IP與端口

運行以後,使用netstat -tlunp可看到以下信息

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      13320/php-cgi

此時若是使用kill -9 pid 的形式,spawn-fcgi會認爲該進程崩潰了,立刻又會啓動另一個進程,故須要屢次執行kill命令,次數與-C 5 指定的進程數相關,故結束進程時推薦使用pkill php-cgi的形式,一次性殺死全部的php-cgi進程。

4、配置Nginx的配置文件

要使php與nginx進行結合,須要在網站配置文件裏,增長對.php結尾的文件進行處理的語句,例子以下:

location ~\.php$ {
    root   /home/homeway/coder;
    index  index.html index.htm;
    fastcgi_index index.php;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REDIRECT_STATUS    200;
    include       fastcgi_params;
}

主要配置解釋:

  • location ~\.php$ 匹配全部以.php結尾的文件,以便對其進行處理
  • fastcgi_index index.php; 首頁文件
  • fastcgi_pass 127.0.0.1:9000; 將該文件傳遞給監聽該端口的程序進行處理,也就是咱們的php-cgi程序
  • include fastcgi_params; 此參數配置文件裏須要進行兩處修改

/etc/nginx/fastcgi_params文件裏增長如下信息(若是已有則跳過)

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
fastcgi_param  PATH_INFO          "";
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

5、測試運行

在網站的root路徑下新增test.php文件,內容以下:

<?php 
echo phpinfo();
?>

對該文件進行訪問,若是出現了PHP的相關信息,則表示PHP已經成功運行了。

PHP Info

CentOS安裝與配置LNMP(4):MySQL數據庫

MySQL數據庫是最流行的關係型數據庫之一,其功能與性能,足以知足大部分中小企業的需求,故在數據庫選擇中,首先MySQL數據庫。本文將講述MySQL數據庫在CentOS下的安裝,雖然與Nginx沒有必然的聯繫,但做爲整個Nginx系列文章的補充,但願可以造成完整的CentOS下網站運行環境搭建的教程。

1、安裝環境

  • 操做系統:CentOS
  • 安裝軟件:MySQL 5.1.73
  • 安裝方式: yum
  • 安裝說明:如下操做如無特別說明,請在root用戶或者具備root權限的用戶下執行

2、安裝

yum install mysql mysql-server

安裝後的文件列表

  • /etc/my.cnf 配置文件
  • /usr/bin/mysql 文字界面的客戶端程序
  • /etc/init.d/mysqld MySQL服務啓動腳本
  • /usr/bin/mysqladmin 對MySQL進行管理配置的程序

3、經常使用命令

啓動MySQL服務

/etc/init.d/mysqld start 或者 service mysqld start

設置爲開機啓動

chkconfig mysqld on

修改密碼

初次安裝後,初始密碼爲空,爲了網站的安全性,須要對密碼進行修改,修改命令以下、

mysqladmin -uroot -p password coderblog

此時會要求你輸入原來的密碼,但由於初始密碼爲空,直接按回車便可。

命令解釋以下:

  • -u root -p 使用root用戶登陸,則須要輸入密碼
  • password coderblog 將密碼修改成coderblog

登陸

mysql -u用戶 -p密碼

備份還原數據庫

mysqldump -u用戶 -p密碼 數據庫名 > 文件路徑

如:

mysqldump -uroot -pcoder coder > /home/homeway/coder.sql

還原數據庫

進入mysql命令界面還原法:

mysql -uroot -pcoder
> create database coder;
> source /home/homeway/coder.sql;
> exit

直接還原法: mysql -u用戶 -p密碼 數據庫名 -e 'source 文件路徑'

-e爲執行命令,執行後直接結束程序

mysql -uroot -pcoder coder -e 'source /home/homeway/coder.sql'

簡單的優化配置

/etc/my.cnf中新增以下內容

default-character-set=utf8
key_buffer_size = 256M
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
read_buffer_size = 4M
join_buffer_size = 8M
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
tmp_table_size = 256M
max_connections = 2048
wait_timeout = 60
thread_concurrency = 8

CentOS安裝與配置LNMP(5):使用GoAccess分析Nginx日誌併發送郵件報告

GoAccess是一款性能很是出色的日誌分析軟件,很是適合來分析Nginx產生的日誌,而且能夠造成HTML報告,經過Crontab定時任務,天天分析主機上的日誌併發送報告到運維人員的郵箱,這樣即可以對網站的運行狀況瞭然於胸。

1、安裝軟件

  • 日誌分析軟件 GoAccess : yum install goaccess
  • 郵件發送軟件 Mutt : yum install mutt
  • SMTP軟件 msmtp : yum install msmtp

2、平常使用

使用命令goaccess -f 日誌文件路徑來對一個日誌文件進行分析,第一次啓動時,會彈出一個對話框,詢問日誌文件的格式,以下圖所示:

GoAccess

此時選擇第三個,即NCSA Commbined Log Format ,使用空格鍵進行選擇,而後回車肯定,而後GoAccess就會以迅雷不及掩耳之勢分析完整個日誌文件。

不想每次都對日誌文件的格式進行選擇的話,能夠新建一個配置文件,好比~/.garc,內容以下:

color_scheme 1
date_format %d/%b/%Y
log_format %h %^[%d:%^] "%r" %s %b "%R" "%u"

而後,啓動程序時,指定配置文件的路徑便可:

goaccess -p ~/.garc -f 日誌文件路徑

3、測試郵件發送功能

一、設置郵件發送賬戶

編輯msmtp的配置文件~/.msmtprc

defaults
account gmail
tls on
auth on
host smtp.gmail.com
port 587
user 郵箱名稱
from 郵箱名稱
password 郵箱密碼
tls_starttls on
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
account default: gmail

上面的例子是以GMail爲例,你們可結合本身使用的郵箱進行設置,其中account gmail中的gmail爲賬戶標識,最後一行account default: gmail指定默認賬戶爲gmail,mutt發送郵件時使用默認賬戶進行發送。

也可使用其它郵箱,不一樣的郵箱有些選項不太同樣,如使用QQ郵箱,則須要關閉tls_starttls,下面列一個QQ郵箱的例子:

defaults
account qq
tls on
auth on
host smtp.qq.com
port 465
user homeway88
from homeway88@qq.com
password 密碼
tls_starttls off
tls_trust_file /etc/pki/tls/certs/ca-bundle.crt
account default: qq

二、配置mutt使用msmtp來發送郵件而不是sendmail

默認mutt使用sendmail來發送郵件,若是你的主機沒有架設郵局功能的話,發送的郵件只是發送到本機的賬戶郵箱,而咱們通常要使用外部smtp服務來將郵件發送到internet郵箱。

編輯Mutt的配置文件/etc/Muttrc.Local,增長如下內容便可,注意發件人郵箱必須和上面指定的msmtp的發件人郵箱一致。

set sendmail = "/usr/bin/msmtp"
set from="發件人郵箱"  
set sendmail="/usr/local/msmtp/bin/msmtp"  
set use_from=yes   
set realname="發件人"

三、使用mutt發送測試郵件

mutt的經常使用發送郵件命令爲

echo "郵件內容"| mutt -s "郵件標題" -a 附件文件路徑 -c 收件人郵箱

4、定時生成日誌報告併發送郵件

分解任務

  • 定時 Crontab
  • 生成日誌報告 GoAccess
  • 發送郵件 mutt

定時任務的格式爲:

分 時 日 月 星期 命令

假設咱們要天天晚上23:59分生成日誌報告,則使用crontab -e,而後添加如下內容便可

59 23 * * * sh /home/homeway/report/nginx.sh

而後新建/home/homeway/report/nginx.sh,輸入如下內容

DATE=$(date +%Y%m%d)
mkdir /home/homeway/report/$DATE
cd /home/homeway/report/$DATE
cp /home/homeway/log/access.log .
echo "" > /home/homeway/log/access.log
cat *.log > all.log
goaccess -f /home/report/$DATE/all.log -a -p ~/.garc > report.html
echo "$DATE Report" | mutt -s "$DATE Report" -a /home/homeway/report/$DATE/report.html -c homeway88@qq.com

命令解釋以下:

  • DATE=$(date +%Y%m%d) 獲取當前日期,格式爲年月日,如20140101
  • 而後新建該日期的歸檔文件夾mkdir /home/homeway/report/$DATE,並把日誌文件拷貝到該文件夾下和清空原來的日誌文件,使用cat *.log > all.log是由於一般主機上都有多個文件,故須要把多個日誌文件合併成一個。
  • goaccess -f /home/report/$DATE/all.log -a -p ~/.garc > report.html 分析日誌並將結果輸出到report.html文件
  • echo "$DATE Report" | mutt -s "$DATE Report" -a /home/homeway/report/$DATE/report.html -c homeway88@qq.com,將該報告文件做爲附件發送到homeway88@qq.com郵箱。

5、結束語

至此,本系列的文章便告一段落啦,一邊寫文章一邊改善博客,雖然花了不少時間,可是本身也頗有收穫,能夠對所學的技巧做一個梳理,以避免時間長了就忘了;也但願可對後來者起到一些幫助。

因爲本人精力有限,文章不免有錯漏和不足之處,但願各位讀者不吝賜教。

 

文章:CentOS安裝與配置LNMP

做者:HomeWay88

發表在: 程旭猿博客 http://www.coderblog.cn/

原文連接:http://www.coderblog.cn/article/36/

轉載請註明出處

相關文章
相關標籤/搜索