本文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
Nginx是一個輕量級的HTTP服務器,與龐大的Apache相比有如下優點,在性能上,它戰用不多的系統資源,能支持更多的併發鏈接,達到更高的訪問效率;在功能上,Nginx是優秀的代理服務器和負載均衡服務器;在安裝配置上,Nginx安裝簡單、配置靈活。而CentOS又是最經常使用的網站服務器的Linux系統,本文將介紹購買VPS主機或者雲主機後,如何在純淨系統下安裝與配置Nginx。html
通常CentOS系統的yum軟件源中,都沒有含有Nginx軟件,故咱們須要導入額外的yum軟件源。java
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
mysql
yum install nginx
linux
安裝後的文件列表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
/etc/init.d/nginx start
web
Or正則表達式
/etc/init.d/nginx restart
若是你看到如下結果,表示Nginx程序已經成功啓動了
Starting nginx: [ OK ]
通常網站服務器都沒有提供圖形化的界面,故咱們須要經過遠程在查看服務器上的網站,首先,得到網站服務器的IP。
ifconfig
而後咱們就能夠在瀏覽器裏,輸入http://服務器的IP/來查看咱們的網站,若是你看到如下的結果,那麼恭喜了,你的網站已經可以正常訪問了
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
若是你的網站沒法正常訪問,請按如下步驟檢查:
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代碼則正常
方法一:停用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
在簡單地安裝完Nginx後,須要對其進行配置,如配置網站的文件路徑,多網站共享同一端口,與PHP的結合,還有對其進行優化。
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,則修改成4error_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文件定義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文件做爲配置文件的內容通常服務器的配置都比較強大,而網絡帶寬都比較小,利用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;
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文件
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }
location ~ /\.ht { deny all; }
修改配置文件後,可用nginx -t
測試配置文件的正確性,以及須要用nginx -s reload
從新載入配置文件。
可能緣由1:缺乏默認文檔文件,如root目錄下缺乏index.html index.htm以及任何一個默認文檔文件,你那麼你直接訪問網站域名的時候,將發生403 Forbidden錯誤; 解決方法:添加至少一個默認文檔到root目錄下
可能緣由2:nginx用戶在root目錄下沒有讀權限,例如將root目錄設置爲/home/homeway,而該目錄的權限爲drwx------
,即除了homeway用戶外,其它用戶沒有讀寫權限。 解決方法:將root目錄權限修改成777,即任何人可讀可寫可執行,執行命令 chmod 777 /home/homeway -R
便可
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結合。
PHP能夠說是目前最流行的網站首選語言,以前兩篇文章已經講了若是在CentOS環境下搭建與優化Nginx環境,本篇文章將講述PHP在CentOS下的安裝,並結合Spawn-fcgi與Nginx進行組合使用。
截至目前爲止,PHP最新版本爲5.6.0,但實際生產環境中,PHP 5.3.3已經可以知足大部分程序的需求,運行比較穩定且擴展模塊比較多,故推薦安裝PHP 5.3.3版本。
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
的形式便可讓其監聽某一端口,但通常不推薦以此種方式運行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進程。
要使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;
在網站的root路徑下新增test.php文件,內容以下:
<?php echo phpinfo(); ?>
對該文件進行訪問,若是出現了PHP的相關信息,則表示PHP已經成功運行了。
MySQL數據庫是最流行的關係型數據庫之一,其功能與性能,足以知足大部分中小企業的需求,故在數據庫選擇中,首先MySQL數據庫。本文將講述MySQL數據庫在CentOS下的安裝,雖然與Nginx沒有必然的聯繫,但做爲整個Nginx系列文章的補充,但願可以造成完整的CentOS下網站運行環境搭建的教程。
yum install mysql mysql-server
安裝後的文件列表
/etc/my.cnf
配置文件/usr/bin/mysql
文字界面的客戶端程序/etc/init.d/mysqld
MySQL服務啓動腳本/usr/bin/mysqladmin
對MySQL進行管理配置的程序/etc/init.d/mysqld start
或者 service mysqld start
chkconfig mysqld on
初次安裝後,初始密碼爲空,爲了網站的安全性,須要對密碼進行修改,修改命令以下、
mysqladmin -uroot -p password coderblog
此時會要求你輸入原來的密碼,但由於初始密碼爲空,直接按回車便可。
命令解釋以下:
-u root -p
使用root用戶登陸,則須要輸入密碼password coderblog
將密碼修改成coderblogmysql -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
GoAccess是一款性能很是出色的日誌分析軟件,很是適合來分析Nginx產生的日誌,而且能夠造成HTML報告,經過Crontab定時任務,天天分析主機上的日誌併發送報告到運維人員的郵箱,這樣即可以對網站的運行狀況瞭然於胸。
yum install goaccess
yum install mutt
yum install msmtp
使用命令goaccess -f 日誌文件路徑
來對一個日誌文件進行分析,第一次啓動時,會彈出一個對話框,詢問日誌文件的格式,以下圖所示:
此時選擇第三個,即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 日誌文件路徑
編輯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使用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的經常使用發送郵件命令爲
echo "郵件內容"| mutt -s "郵件標題" -a 附件文件路徑 -c 收件人郵箱
分解任務
定時任務的格式爲:
分 時 日 月 星期 命令
假設咱們要天天晚上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)
獲取當前日期,格式爲年月日,如20140101mkdir /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
郵箱。至此,本系列的文章便告一段落啦,一邊寫文章一邊改善博客,雖然花了不少時間,可是本身也頗有收穫,能夠對所學的技巧做一個梳理,以避免時間長了就忘了;也但願可對後來者起到一些幫助。
因爲本人精力有限,文章不免有錯漏和不足之處,但願各位讀者不吝賜教。
文章:CentOS安裝與配置LNMP
做者:HomeWay88
發表在: 程旭猿博客 http://www.coderblog.cn/
原文連接:http://www.coderblog.cn/article/36/
轉載請註明出處