Nginx (讀“engine x”)是一款免費(fèi)、開(kāi)源虚茶、高性能的HTTP服務(wù)器戈鲁。 Nginx 因性能穩(wěn)定、功能豐富嘹叫、配置簡(jiǎn)單婆殿、資源消耗低而著稱(chēng)。
本文介紹如何在Linux服務(wù)器(Cent OS7)上安裝Nginx罩扇、MySQL和PHP婆芦,這個(gè)環(huán)境也簡(jiǎn)稱(chēng) LNMP 或LEMP 。其中喂饥,Nginx和PHP的采用PHP-FPM方式消约。
先看虛擬機(jī)配置【電腦位32G內(nèi)存,所以可以這么任性 -_-】
本問(wèn)中的測(cè)試主機(jī)是用虛擬機(jī)IP地址來(lái)訪問(wèn)的仰泻,請(qǐng)根據(jù)具體情況替換
教程中的命令都是在root權(quán)限下操作荆陆,請(qǐng)切換到root用戶(hù),命令
su
輸入密碼后進(jìn)入root用戶(hù)控制臺(tái)
安裝 MySQL5
與CentOS 6不同集侯,CentOS 7服務(wù)器必須通過(guò)社區(qū)倉(cāng)庫(kù)來(lái)安裝MySQL被啼。如果像CentOS 6中用:yum install mysql
幅狮,默認(rèn)就會(huì)安裝 MariaDB 數(shù)據(jù)庫(kù)潦嘶。(說(shuō)明:MariaDB數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL的一個(gè)分支漠趁,主要由開(kāi)源社區(qū)在維護(hù)匿醒,采用GPL授權(quán)許可蚓耽。開(kāi)發(fā)這個(gè)分支的原因之一是:甲骨文公司收購(gòu)了MySQL后歉闰,有將MySQL閉源的潛在風(fēng)險(xiǎn)装悲,因此社區(qū)采用分支的方式來(lái)避開(kāi)這個(gè)風(fēng)險(xiǎn)椅您,目前來(lái)看沒(méi)有太大必要贱除。)
MySQL的社區(qū)倉(cāng)庫(kù):https://dev.mysql.com/downloads/repo/yum/生闲,安裝步驟:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server
在詢(xún)問(wèn)的時(shí)候鍵入y
確定安裝。然后啟動(dòng)MySQL月幌,并設(shè)置開(kāi)機(jī)啟動(dòng):
systemctl start mysqld # 啟動(dòng) MySQL
systemctl enable mysqld # 開(kāi)機(jī)啟動(dòng)ySMySQL
MySQL默認(rèn)會(huì)綁定到地址 localhost(127.0.0.1)碍讯,默認(rèn)用戶(hù)名是root
,密碼為空扯躺。使用下面的命令修改密碼:
mysql_secure_installation
搞死人 --- 安裝半個(gè) 源不在國(guó)內(nèi)捉兴。蝎困。
安裝 Nginx
如果系統(tǒng)安裝了Apache,先卸載。
service httpd stop
systemctl disable httpd
yum remove httpd
再安裝Nginx:
yum install epel-release
yum -y install nginx
啟動(dòng) Nginx倍啥,并設(shè)置為開(kāi)機(jī)啟動(dòng):
systemctl start nginx
systemctl enable nginx
又10多分鐘過(guò)去了
我們輸入
ip addr //查看我們虛擬機(jī)的ip地址
我們還有開(kāi)啟80端口的權(quán)限
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
可以訪問(wèn)了
安裝 PHP5-FPM
yum install php php-mysql php-fpm
然后是配置禾乘。打開(kāi)文件 /etc/php.ini,設(shè)置cgi.fix_pathinfo=0(要先刪除前面的;注釋符)虽缕,如下:
[...]
cgi.fix_pathinfo=0
[...]
用vim打開(kāi) 直接/cgi.fix_pathinfo 回車(chē)就可以到達(dá)
再配置PHP-FPM始藕。打開(kāi)文件 /etc/php-fpm.d/www.conf,
將 127.0.0.1:9000 改為 php-fpm.sock 文件
取消 listen.owner和listen.group前面的注釋
將user 和 group 的值由apache 改為 nginx
如下
[...]
listen = /var/run/php-fpm/php-fpm.sock
[...]
listen.owner = nobodylisten.group = nobody
[...]
user = nginxgroup = nginx
[...]
啟動(dòng) PHP-FPM氮趋,并設(shè)置為開(kāi)機(jī)啟動(dòng):
systemctl start php-fpm
systemctl enable php-fpm
PHP-FPM 啟動(dòng)之后鳄虱,會(huì)生成 socket 文件 /var/run/php-fpm/php-fpm.sock
作為守護(hù)進(jìn)程運(yùn)行 FastCGI 服務(wù)。接下來(lái)配置 Nginx 的時(shí)候會(huì)用到這個(gè) socket 文件凭峡。
配置 Nginx
Nginx 的配置文件是:/etc/nginx/nginx.conf拙已,使用 vim 打開(kāi):
vi /etc/nginx/nginx.conf
配置項(xiàng)非常簡(jiǎn)單,如果需要了解詳細(xì)內(nèi)容摧冀,可看:https://www.nginx.com/resources/wiki/start/topics/examples/full/倍踪。下面介紹基本的配置。
首先索昂,根據(jù)情況調(diào)整worker_processes和keepalive_timeout(可選):
[...]
worker_processes 4;
[...]
keepalive_timeout 2;
[...]
虛擬主機(jī)定義在 server{} 容器中建车,修改為如下內(nèi)容:
[...]
server {
listen 80;
listen [::]:80 default_server;
server_name _; root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = 40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php; include fastcgi_params;
}
}
[...]
關(guān)于配置的一些說(shuō)明:
首先,我們打開(kāi)兩個(gè)listen
椒惨,讓 Nginx 同時(shí)偵聽(tīng) IPv4 和 IPv6 的80
端口缤至。
server_name _;
綁定所有的 vhost(可以指定主機(jī)名,如 www.example.com)康谆。
腳本根目錄 root 不變领斥,依然是 /usr/share/nginx/html
。
索引首頁(yè)文件 index 添加上 index.php
沃暗。
其中針對(duì) PHP 很重要的部分在location ~.php$ {}
中月洛。為防止零日攻擊(詳見(jiàn):http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP andhttp://forum.nginx.org/read.php?2,88845,page=3),該部分開(kāi)頭設(shè)置了try_files $uri =404;
孽锥。
保存配置文件后嚼黔,檢查配置文件的語(yǔ)法,再重新加載 Nginx:
nginx -t # 檢查配置文件語(yǔ)法
systemctl reload nginx # 重新加載nginx
在 /usr/share/nginx/html 目錄下創(chuàng)建文件 index.php惜辑,內(nèi)容為:
<?php
phpinfo()
;?>
可以看到唬涧,PHP5 已經(jīng)工作,根據(jù) Server API 行看出盛撑,是通過(guò) FPM/FastCGI 方式工作的碎节,往下拉會(huì)看到 PHP5 加載的其他模塊,包括MySQL撵彻、cURL钓株、sqlite模塊的支持。
PHP-FPM 使用 TCP 連接
默認(rèn)情況下陌僵,PHP-FPM 通過(guò) /var/run/php-fpm/php-fpm.sock 文件偵聽(tīng) socket轴合。當(dāng)然,也可以設(shè)置 PHP-FPM 使用 TCP 連接碗短。打開(kāi)文件 /etc/php-fpm.d/www.conf受葛,設(shè)置 listen
值如下:
[...]
;listen = /var/run/php-fpm/php-fpm.sock
listen = 127.0.0.1:9000
[...]
這樣 PHP-FPM 會(huì)偵聽(tīng)地址 127.0.0.1(localhost)和端口9000,確保這個(gè)端口沒(méi)有被其他程序占用偎谁。然后重新加載 PHP-FPM:
systemctl reload php-fpm
接下來(lái)总滩,編輯 /etc/nginx/nginx.conf 文件,修改如下一行:
[...]
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
[...]
然后巡雨,重載 nginx 就可以了:
sytemctl reload nginx
這樣闰渔,整個(gè)LNMP環(huán)境就搭好了。