LNMP + Apache 架構配置

從事前端開發已3年有餘,愈來愈發現前端開發要學習的知識已不只僅是html+css+js那麼簡單了,2017年市場上就有了大前端的概念,能夠說對前端工程師的要求也愈來愈高了,從招聘的要求中能夠看到熟悉一門後端語言能夠說是標配了。因爲目前公司用的後臺語言是PHP,藉此機會充分鍛鍊了個人PHP技能。現在不只要對PHP語言熟悉,還要熟悉公司整個架構,今天我經過在WIN7上安裝的虛擬機上練習了下搭建LNMPA架構,順便作下筆記。php

前提準備

須要在官網上下載如下軟件css

  • CentOS 這裏選擇aliyun的鏡像
  • Virtual Box 這裏選擇5.2.8版本
  • xshell5 這裏選擇能夠無償使用的Home & School user

安裝CentOS系統

  1. 安裝virtual box虛擬機
  2. 新建虛擬機電腦,輸入名稱CentOS,而後一直選擇下一步
  3. 啓動CentOS,選擇啓動盤時,選擇咱們下載好的CentOS鏡像文件後,點擊啓動
  4. 進入安裝界面,選擇Install CentOS 7
  5. 安裝過程當中設置好語言,安裝位置(磁盤分區選擇默認)和網絡(打開以太網鏈接),設置好後點擊開始安裝
  6. 安裝過程當中設置root密碼及建立用戶,安裝完成後點擊重啓

設置固定ip訪問xshell遠程登陸

網卡設置

網卡設置前先查詢主機的網絡ip
cmd ipconfig /all
分別記下本地鏈接的ipv4地址、子網掩碼、網關
登陸centos虛擬主機後html

cd /etc/sysconfig/network-scripts/
ls

通常第一個就是本身的網卡,我這裏是ifcfg-enp0s3前端

vi ifcfg-enp0s3

添加如下內容mysql

BOOTPROTO="dhcp"//改成"static"
IPADDR="10.0.5.100"//設置爲與ipv4地址在同一網段
NETMASK="255.255.0.0"//設置子網掩碼
GATEWAY="10.0.0.1"//設置網關

執行linux

systemctl restart network.service //重啓網絡

此時測試主機和虛擬機是否可互相ping通ios

開啓22端口

firewall-cmd --zone=public --add-port=22/tcp --permanent //開啓22端口
systemctl restart firewalld.service //重啓防火牆

設置防火牆容許http服務nginx

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

此時可在xshell上遠程登陸虛擬主機了web

ssh username@10.0.5.100

LAMP環境搭建

安裝Apache

sudo yum -y install httpd

安裝完成後,修改配置文件,sql

vi /etc/httpd/conf/httpd.conf

把 ServerName 前的 # 去掉,並修改成:ServerName 127.0.0.1 並保存
重啓apache

sudo apachectl restart

在主機瀏覽器中輸入10.0.5.100便可看到apache測試頁面(須要開啓80端口)

安裝MySQL

sudo yum -y install mysql mariadb-server

安裝完成後,啓動 MySQL:

sudo systemctl start mariadb.service

接下來開始初始化 MySQL,並按照提示設置 MySQL中的 root 用戶的密碼及其餘配置:

sudo mysql_secure_installation

配置以下

Enter current password for root (enter for none) (按回車)
Set root password? [Y/n]   (輸入 Y:回車)
New password:              (輸入新密碼,回車)
Re-enter new password:     (再次輸入新密碼,回車)

Remove anonymous users? [Y/n]                (輸入 Y:回車)
Disallow root login remotely? [Y/n]          (輸入 Y:回車)
Remove test database and access to it? [Y/n] (輸入 Y:回車)
Reload privilege tables now? [Y/n]           (輸入 Y:回車)

登陸mysql

mysql -u root -p

安裝 PHP7

安裝epel

sudo yum -y install epel-release

更換rpm源

sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安裝php7.0

sudo yum -y install php70w

安裝結束後,重啓 Apache

sudo apachectl restart

在 Apache 的默認網站目錄添加 phpinfo.php 文件,

vi /var/www/html/phpinfo.php 
//添加如下內容
<?php
phpinfo();
?>

設置開機啓動項

systemctl enable httpd.service
systemctl enable mariadb.service

至此,LAMP 環境搭建完成!

LNMP環境搭建

安裝 Nginx

此步驟接上,爲了不衝突,先關閉 Apache: sudo systemctl stop httpd.service
CentOS 官方 rpm 源是沒有 nginx 安裝包的,須要手動添加,

cd /etc/yum.repos.d/
vi nginx.repo

往 nginx.repo 文件裏添加以下代碼:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
gpgcheck=0
enabled=1

保存後,便可開始安裝 Nginx,

sudo yum -y install nginx

安裝結束後,啓動 Nginx,記得先關閉 Apache

sudo systemctl start nginx.service

此時用瀏覽器訪問10.0.5.100便可看到Welcome to nginx!

安裝PHP-FPM(FastCGI)

sudo yum -y install php-fpm

開啓php-fpm

sudo systemctl start php-fpm.service

編輯 Nginx 的默認配置文件 default.conf

sudo vim /etc/nginx/conf.d/default.conf

把 default.conf 文件中 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 這一行下面的 # 註釋去掉,並修改 root 後面的目錄爲:/usr/share/nginx/html;(此目錄爲 Nginx 的默認網站目錄),修改 SCRIPT_FILENAME 後的參數爲:$document_root$fastcgi_script_name;
重啓 Nginx, systemctl restart nginx.service
一樣,在 Nginx 的默認網站目錄下添加 phpinfo.php 文件,在瀏覽器中可瀏覽php相關信息

設置開機啓動項

systemctl enable httpd.service
systemctl enable mariadb.service

至此,LNMP 環境搭建完成!

LNMP + Apache 架構配置:Nginx 作前端代理 + Apache 作後端服務

Apache優點與劣勢

Apache用戶基數大,穩定,兼容性高,在處理動態 php 頁面時,mod_php 模塊也比 php-cgi 模塊更穩定更高效。
Apache過於臃腫以及對靜態文件響應過於緩慢讓不少使用者感到頭疼

Nginx優點與劣勢

Nginx 對於高併發性能出衆,Proxy 功能強效率高,佔用系統資源少
Nginx在處理 php 腳本時須要經過 php-fpm(FastCGI) 解析,而 php-fpm 不夠穩定,常常出現 502 錯誤,生成相對複雜的頁面沒有優點,反而會使 php-cgi 進程變爲殭屍進程。

不少大型的網站都是採用 Nginx 前端 + Apache 後端的服務器架構,這樣能夠很好地結合了 Nginx 高併發和靜態頁面高效率以及 Apache 穩定的動態頁面處理特色,不再用擔憂 Nginx 以 FastCGI 模式運行 PHP 時的502問題和 Apache 處理靜態頁面過慢、負載太高的問題。

配置 LNMP + Apache 架構

編輯 Nginx 的默認配置文件

sudo vim /etc/nginx/conf.d/default.conf

註釋掉以前 FastCGI 監聽的配置,並添加Apache對php腳本的監聽

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location ~ \.php$ {
    proxy_pass   http://127.0.0.1:8080;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           /usr/share/nginx/html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
#    include        fastcgi_params;
#}

編輯 Apache 的配置文件

sudo vim /etc/httpd/conf/httpd.conf

找到 Listen 字段,並改成:Listen 127.0.0.1:8080,讓 Apache 來監聽這個端口,修改 Apache 的網站根目錄爲:/usr/share/nginx/html,與上述 Nginx 對應的網站目錄保持一致

重啓 Nginx ,Apache 服務,並確保這兩個服務開機自啓:

sudo systemctl restart httpd.service
sudo systemctl restart nginx.service
systemctl enable httpd.service
systemctl enable nginx.service

發現出現 502 Bad Gateway
經查閱相關資料發現是因爲開啓了 selinux 服務致使的,關閉 selinux 便可。

sudo vim /etc/selinux/config

SELINUX=disabled

修改保存後,經過 reboot 命令重啓 CentOS 服務器

至此,LNMP + Apache 架構配置完成!可經過瀏覽器查看http://10.0.5.100/phpinfo.php來確認

補充
儘管此時LNMP+Apache架構已搭建完,可是在開發的過程當中咱們仍舊不方便,由於咱們通常都在本地開發,但是如何讓文件在linux服務器上運行呢?咱們總不能又在本地搭建一套環境吧,

samba文件伺服器

利用samba就能夠解決上面遇到的問題,讓本地開發的代碼用虛擬機中搭建好的環境跑起來,
1.安裝samba

yum install samba -y
  1. 修改配置文件
cd /etc/samba
 cp smb.conf smb.conf.bak 備份一份再說
 vim smb.conf 把多餘的註釋去掉,增長以下的配置
[global] #---------------------全局設置
    workgroup = ranfeng #------------工做組和windows工做組性質同樣
    server string = 測試samba %v #-----服務一種描述,能夠隨意寫
    netbios name = ranfeng #-----這個netbios名,這個如今不重要
    security = user #這個是驗證方式,user是密碼登陸,不支持share和server,設置user後加入下面一句話
    map to guest = Bad User #
[share]
      path = /usr/share/web
      available = yes
      browseable = yes
      public = yes
      writable = yes

創建Samba用戶及密碼
useradd sambauser
smbpasswd -a sambauser
啓動服務

smbd start

添加進開機啓動

chkconfig smb on

編輯/etc/selinux/config
將 SELINUX=enforcing 改爲 SELINUX=disabled
至此就能夠在window上經過磁盤映射將linux上共享的目錄掛載到window上,這樣咱們在這個磁盤上全部的修改與建立都在虛擬機linux能夠看到

參考文獻

Win7 下 VMware 虛擬機中安裝 CentOS 服務器
CentOS 6.7下 Samba服務器的搭建與配置
https://www.jianshu.com/p/b35f59109c2e

相關文章
相關標籤/搜索