LNMP + Apache 架构配置
从事前端开发已3年有余,越来越发现前端开发要学习的知识已不仅仅是html+css+js那么简单了,2017年市场上就有了大前端的概念,可以说对前端工程师的要求也越来越高了,从招聘的要求中可以看到熟悉一门后端语言可以说是标配了。由于目前公司用的后台语言是PHP,借此机会充分锻炼了我的PHP技能。如今不仅要对PHP语言熟悉,还要熟悉公司整个架构,今天我通过在WIN7上安装的虚拟机上练习了下搭建LNMPA架构,顺便做下笔记。
前提准备
需要在官网上下载以下软件
- CentOS 这里选择aliyun的镜像
- Virtual Box 这里选择5.2.8版本
- xshell5 这里选择可以免费使用的Home & School user
安装CentOS系统
- 安装virtual box虚拟机
- 新建虚拟机电脑,输入名称CentOS,然后一直选择下一步
- 启动CentOS,选择启动盘时,选择我们下载好的CentOS镜像文件后,点击启动
- 进入安装界面,选择Install CentOS 7
- 安装过程中设置好语言,安装位置(磁盘分区选择默认)和网络(打开以太网连接),设置好后点击开始安装
- 安装过程中设置root密码及创建用户,安装完成后点击重启
设置固定ip访问xshell远程登录
网卡设置
网卡设置前先查询主机的网络ip
cmd ipconfig /all
分别记下本地连接的ipv4地址、子网掩码、网关
登录centos虚拟主机后
cd /etc/sysconfig/network-scripts/
ls
一般第一个就是自己的网卡,我这里是ifcfg-enp0s3
vi ifcfg-enp0s3
添加以下内容
BOOTPROTO="dhcp"//改为"static"
IPADDR="10.0.5.100"//设置为与ipv4地址在同一网段
NETMASK="255.255.0.0"//设置子网掩码
GATEWAY="10.0.0.1"//设置网关
执行
systemctl restart network.service //重启网络
此时测试主机和虚拟机是否可互相ping通
开启22端口
firewall-cmd --zone=public --add-port=22/tcp --permanent //开启22端口
systemctl restart firewalld.service //重启防火墙
设置防火墙允许http服务
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
此时可在xshell上远程登录虚拟主机了
ssh username@10.0.5.100
LAMP环境搭建
安装Apache
sudo yum -y install httpd
安装完成后,修改配置文件,
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
- 修改配置文件
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
LNMP + Apache 架构配置的更多相关文章
- LNMP安装与配置之CentOS7的安装。
LNMP与LAMP是我们常见的两种网站服务器架构.LNMP代表的就是Linux系统下Nginx+MySQL+PHP/Python,LAMP代表的则是Linux系统下Apache+MySQL+PHP/P ...
- 8.LNMP环境的配置
LNMP环境的配置 参照文档:https://oneinstack.com/install/ 安装文件位置:/data/soft: ```yum -y install wget screen pyth ...
- LNMP的基本配置
LNMP的基本配置cd /usr/local/nginx_php/etc/ > php-fpm.conf //清空php-fpm.conf vim ph ...
- LNMP WEB架构构建
LNMP WEB架构处理请求过程 1.Nginx为一款高性能Web服务器,本身是不能处理PHP的,当接收到客户端浏览器发送HTTP Request请求时,Nginx服务器响应并处理web请求,静态资源 ...
- 轻松获取LAMP,LNMP环境编译参数配置
轻松获取LAMP,LNMP环境编译参数配置 作者:Mr.Xiong /分类:系统管理 字号:L M S 大家是否遇到过去了新公司,公司内的LAMP,LNMP等所有的环境都是配置好的(已经在提 ...
- 【只需3步】源码手动安装Apache以及配置(亲测可行)
作者小波/QQ463431476欢迎转载! redhat6采用centos yum源. 第一步下载apache依赖的软件包并安装 安装 apr下载地址:http://apr.apache.org/do ...
- centos apache svn配置
单独安装svn服务: 安装svn软件 yum install subversion 创建根目录 mkdir -p /var/www/svn 创建版本库repos svnadmin create /va ...
- Apache+PHP 配置随笔
准备安装包 1:安装VC++ 2012(vcredist_x64,我这边服务器为64位) 2:Apache安装包,php安装包 安装后配置工作 1:安装Apache服务,配置环境变量 httpd -k ...
- Apache安装配置步骤
注释:这里以Linux 红帽商业版为例~~~~~~~纯手打啊 Apache安装配置步骤 准备:关闭其他虚拟设备 #/etc/init.d/libvirtd stop #/etc/init.d/xend ...
随机推荐
- 1.numpy的用法
numpy创建ndarray对象的三种方法 1.1.list转化 In [8]: import numpy as np In [9]: a = [1,2,3,4] In [10]: x1 = np.a ...
- IdentityServer4(8)- 使用密码认证方式控制API访问(资源所有者密码授权模式)
一.前言 本文已经更新到 .NET Core 2.2 OAuth 2.0 资源所有者密码模式允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了通过无法浏览器进行交互的应用程序之外 ...
- Linux编程 17 文件权限(权限设置chmod,改变文件属主属组关系chown,chgrp)
一. 概述 如果创建了一个目录或文件,有时会需要改变它的安全性设置,在linux系统上有一些工具可以完成这任务,包括使用chmod命令改变已有默认权限,分别能对属主,属组,其它用户的权限的控制分别以读 ...
- leetcode — minimum-path-sum
/** * Source : https://oj.leetcode.com/problems/minimum-path-sum/ * * * Given a m x n grid filled wi ...
- linux 命令 — find
find 基本形式 find base_path base_path可以是任何目录,find会从该目录开始往下寻找 find . -print 列出当前目录下所有的文件和目录,以'\n'作为分隔符 f ...
- 连载《一个程序猿的生命周期》-《发展篇》- 22.城市奋斗者的阿Q精神
好久没有写文章了,有些人会认为博主肯定是没有什么好写的了.其实不然,是想写的太多,实在是没有时间.上半年一直比较忙,处于加班常态的状态,身心疲惫.相较于城市的伪奋斗者,我算比较实干的,而界定“实干”的 ...
- Spring之InstantiationAwareBeanPostProcessor接口介绍
InstantiationAwareBeanPostProcessor接口是BeanPostProcessor的子接口,通过接口字面意思翻译该接口的作用是感知Bean实例话的处理器.实际上该接口的 ...
- 聊聊数据库~2.SQL环境篇
传统数据库 上篇文章:聊聊数据库~开篇 https://www.cnblogs.com/dotnetcrazy/p/9690466.html 本来准备直接开讲NoSQL的(当时开篇就是说的NoSQL) ...
- 多选穿梭框总结 (vue + element)
博客地址:https://ainyi.com/23 示例 介绍 实现省市区三级多选联动,可任选一个省级.市级.区级,加入已选框,也可以在已选框中删除对应的区域. 选择对应仓库,自动勾选仓库对应的省,取 ...
- Ioc原理理解
IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 如果我们打开机械式手表的后盖,就会看到与上面类似 ...