源码编译构建LAMP

Apache

起源

  • 源于A Patchy Server,著名的开源Web服务软件
  • 1995年时,发布Apache服务程序的1.0版本
  • 由Apache软件基金会(ASF)负责维护
  • 最新的名称为“Apache HTTP Server”
  • 官方站点:http://httpd.apache.org/

主要特点

  • 开发源代码/跨平台应用
  • 支持多种网页编程语言
  • 模块化涉及、运行稳定、良好的安全性

软件版本

  • 1.X
    • 目前最高版本是1.3
    • 向下兼容较好,但缺乏一些较新功能
  • 2.X
    • 目前最高版本是2.4
    • 具有更多的功能特性
    • 与1.X相比,配置管理风格存在较大差异

编译安装httpd服务器

优点

  • 具有较大自由度,功能可以定制
  • 可以及时获得最新的软件版本
  • 普遍吧适用于大多数Linux版本,便于移植使用

获得Apache服务器的源码包

  • 参考地址:http://httpd.apache.orrg/download.cgi

安装httpd服务器步骤

准备工作

rpm -qa httpd                                         #检查是否已安装httpd
yum -y install apr-util-devel pcre-devel gcc*         #使用yum安装运行环境#gcc 基于gnu的c语言编译器

源码编译和安装

解包

下载并解压httpd源码包

配置

进入解压后的http包中,使用

./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi 
//指定安装路径、启用字符集支持等

prefix:指定安装路径

命令中的so指的是DSO,功能是动态共享目标

rewrite重写    charset字符集        cgi通用网关接口

编译及安装
make && make install
确认安装结果

使用ls命令查看安装目录下的文件

[root@localhost ~]# ls /usr/local/httpd/
bin    cgi-bin  error   icons    logs  manual
build  conf     htdocs  include  man   modules
优化执行路径
ln -s /usr/local/httpd/bin/* /usr/local/bin/

这样在执行相关命令时就可以之间使用“httpd -v”,而不再需要输入冗长的路径

添加httpd系统服务

进入该路径vim /usr/local/httpd/conf/httpd.conf,设置ServerName(为了解决运行时的提示

在/lib/systemd/system下创建一个httpd.service,并在其中添加以下代码

[Unit]Description=my httpdAfter=network.target[Service]Type=forkingPIDFile=/usr/local/httpd/logs/httpd.pidExecStart=/usr/local/httpd/bin/apachectl $OPTIONSExecReload=/bin/kill -HUP $MAINPID[Install]WantedBy=multi-user.target

添加完成后使用systemctl daemon-reload,使systemd读取可运行命令        

httpd服务器的基本配置

1.确认网站名称、IP地址

在客户机的/etc/hosts中为主机的IP添加内容

192.168.10.101 www.kgc.com 

2.配置并启动httpd服务

(1)配置httpd服务

[root@localhost conf]# vim httpd.conf
ServerName www.kgc.com[root@localhost conf]# apachectl -t        //对配置内容进行语法检查,若是没有错误,则会显示“Syntax OK”

(2)启动httpd服务

由于前面已经将httpd服务添加到系统服务,所以可以使用systemd启动

[root@localhost conf]# systemctl start httpd

(3)部署网页文档

在httpd安装路径下的htdocs目录,http提供了一个名为index.html的测试网页,作为网站的默认首页

[root@localhost conf]# cat /usr/local/httpd/htdocs/index.html 
<html>
<head>    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    //设定字符集编码。没有这一行若文本中有文字则会显示乱码
<title>无标题文档</title>
</head>
<body>
<h1>你好</h1>
</body>
</html>

(4)在客户机中访问Web站点

在客户机的网页浏览器中,可以通过域名或IP访问httpd浏览器

构建虚拟主机

(单个主机运行多个站点

编辑httpd主配置文件,加载独立的配置文件

[root@localhost ]# vim /usr/local/httpd/conf/httpd.conf
…………
Include conf/extra/httpd-vhosts.conf

基于主机名的虚拟主机

mkdir -p /var/www/htmll/accpcom
mkdir -p /var/www/htmll/benetcom
echo "www.accp.com">/var/www/html/accpcom/index.html
echo "www.benet.com">/var/www/html/benetcom/index.html

为虚拟机准备网页文档

[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost *:80>ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost *:80>ServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>

配置完成后,在虚拟机中使用不同的域名来访问

基于IP的虚拟主机

在基于域名的虚拟主机的基础上进行修改

[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost 192.168.10.210:80>        //将*改为固定的IPServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost 192.168.10.101:80>    //将*改为固定的IPServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>

为服务器添加一个虚拟网卡

[root@localhost extra]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
[root@localhost extra]# cat /etc/sysconfig/network-scripts/ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.210
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DN2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
#UUID=126dd06e-b440-4252-8cbd-41912905145e
DEVICE=ens33:0
ONBOOT=yes

基于端口的虚拟主机

继续基于IP的虚拟主机的配置进行修改
监听80和8080端口

[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost 192.168.10.101:80>        //将*改为固定的IPServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost 192.168.10.101:8080>    //将*改为固定的IPServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>Listen 80
listen 8080

然后在主机中分别访问192.168.10.101:80 和 192.168.10.101:8080

MySql的编译安装

准备工作

下载并解压源码包

使用yum下载ncurses-devel  autoconf 和cmake
yum -y install ncurses-devel autoconf  cmake

添加一个不可登录没有家目录的用户

useradd -M -s /sbin/nologin mysql

源码包的编译和安装

使用cmake进行编译

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

DCMAKE_INSTALL_PREFIX    指定安装路径
DSYSCONFDIR    指定配置文件路径
DDEFAULT_CHARSET         默认字符集
DDEFAULT_COLLATION    默认字符集校对规则
DWITH_EXTRA_CHARSETS    其他字符集

make && make install编译并安装

安装后的其他调整

对数据库安装目录设置权限

chown -R mysql:mysql mysql/

删除系统生成的mariadb配置文件

rm -rf /etc/my.cnf

复制MySQL源码包下的support-files目录下的my-default.cnf文件到/etc下

cp my-default.cnf /etc/my.cnf

初始化

运行/usr/local/mysql/scripts/下的mysql_install_db以初始化

./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

设置环境变量

编辑/etc/profile在最后添加export PATH=$PATH:/usr/local/mysql/bin

启动并访问mysql服务

复制mysql源码包/support-files/mysql.server 到/etc/init.d/下的mysqld
然后为其添加执行权限,使用chkconfig --add mysqld把服务添加为系统服务
mysql -uroot进入mysql,此时mysql没有密码
>set password=password("pwd123")
>exit
再次进入就需要输入密码
mysql -uroot -ppwd123 [已存在的数据库]

 构建PHP运行环境

准备工作

使用ali的yum仓库下载软件包
依赖包
yum -y install zlib-devel libxml2 libxml2-devel 
扩展工具库
yum -y install libmcrypt libmcrypt-devel mcrypt mhash

编译并安装PHP

下载并解压php源码包

cd进入源码包
使用./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring

prefix:安装路径
--with-mcrypt:加载数据加密等扩展工具支持
--with-apxs2:设置apache HTTP Server提供的apxs模块支持程序的安装位置
--with-mysql:设置MySQL数据库服务程序的安装位置
--with-mysqli: 扩展mysql集
--with-config-file-path:设置PHP配置为保护php.ini存放为孩子
--enable-mbstring: 启用多字节字符串功能

编译及安装make && make install

设置LAMP组件环境

安装好PHP软件包后,php.ini不会自动创建,需要去软件包中复制模板

cp php.ini-development /usr/local/php5/php.ini

使用vim编辑器修改其中的内容

default_charset="UTF-8"    #取消注释

short_open_tag=On        #修改值

extension=php_mysqli.ddl    #取消注释

添加ZendGuardLoader优化模块
解压并进入zend-loader-php包
cp ZendGuardLoader.so /usr/local/php5/lib/php
vim /usr/local/php/php.ini
在[PHP]下面添加
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so 
zend_loader.enable=1

修改httpd的主配置文件
添加LoadModule php_module modules/libphp5.so
AddType application/x-httpd-php 
在 DirectoryIndex index.html 后面追加 index.php
重启服务更新配置

测试LAMP

测试网页是否能正常显示

在 /usr/local/httpd/htdocs/目录下添加test1.php

<?php 

phpinfo( );     #PHP程序的版本好、配置命令、运行变量相关信息

?>

测试PHP网页是否能够访问MySql数据库
在 /usr/local/httpd/htdocs/目录下添加test2.php

<?php 
$link=mysqli_connect('localhost','root','pwd123'); 
if($link) echo "恭喜你,数据库连接成功啦!!"; 
mysqli_close($link); 
?> 

测试LAMP架构应用实例
解压并复制到网站目录
建立配置文件,进入到网站目录下的包目录
最后使用主机测试即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql union语句

开源项目SDK&#xff1a;https://github.com/mingyang66/spring-parent 个人文档&#xff1a;https://mingyang66.github.io/raccoon-docs/#/ mysql union操作符用于连接两个以上的select语句的结果组合到一个结果集&#xff0c;并去除重复的行&#xff0c;每个select语句的雷叔…

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException异常问题如何解决?

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SELECT command denied to user XXXXXXX for table sys_users这是一个 MySQL 权限问题&#xff0c;表示用户 “XXXXXX” 没有对表 “sys_users” 执行 SELECT 操作的权限。 解决方案&#xff1a; 检查用户权限&am…

【课程总结】Day8(上):深度学习基本流程

前言 在上一篇课程《【课程总结】Day7&#xff1a;深度学习概述》中&#xff0c;我们了解到&#xff1a; 模型训练过程→本质上是固定w和b参数的过程&#xff1b;让模型更好→本质上就是让模型的损失值loss变小&#xff1b;让loss变小→本质上就是求loss函数的最小值&#xf…

函数用于将字符串反转以及函数的作用

在C语言中&#xff0c;你可以通过交换字符串中字符的位置来实现字符串的反转。以下是一个简单的函数示例&#xff0c;用于反转一个字符串&#xff1a; c复制代码 #include <stdio.h> #include <string.h> void reverse_string(char *str) { char *start str;…

【深度学习】深入解码:提升NLP生成文本的策略与参数详解

文章目录 解码策略解码参数公式解释代码例子区别 更详细的束搜索的解释更详细的例子解释第一步第二步第三步 解码策略和解码参数在自然语言处理&#xff08;NLP&#xff09;模型的生成过程中起着不同的作用&#xff0c;但它们共同决定了生成文本的质量和特性。 解码策略 解码…

史上最全盘点:一文告诉你什么是erp?erp系统厂商分别有哪些?

✅ 什么是ERP&#xff1f; ERP是Enterprise Resource Planning&#xff08;企业资源计划&#xff09;的简称&#xff0c;ERP是针对物资资源管理&#xff08;物流&#xff09;、人力资源管理&#xff08;人流&#xff09;、财务资源管理&#xff08;资金流&#xff09;、信息资…

人工智能与图像识别:深度融合的新趋势

人工智能与图像识别正呈现深度融合的新趋势&#xff0c;这一趋势主要体现在以下几个方面&#xff1a; 深度学习技术的推动&#xff1a; 深度学习作为人工智能的重要分支&#xff0c;为图像识别提供了强大的技术支持。尤其是卷积神经网络&#xff08;CNN&#xff09;的发展&…

java MultipartFile 转 file

在Java中&#xff0c;MultipartFile 是Spring框架中用于处理上传文件的一个接口&#xff0c;而File则是Java标准库中表示文件的一个类。要将MultipartFile转换为File&#xff0c;可以使用MultipartFile的transferTo(File dest)方法。 以下是一个将MultipartFile转换为File的示…

webshell三巨头 综合分析(蚁剑,冰蝎,哥斯拉)

考点: 蚁剑,冰蝎,哥斯拉流量解密 存在3个shell 过滤器 http.request.full_uri contains "shell1.php" or http.response_for.uri contains "shell1.php" POST请求存在明文传输 ant 一般蚁剑执行命令 用垃圾字符在最开头填充 去掉垃圾字符直到可以正常bas…

【网络编程】TCP原理

TCP套接字中的I/O缓冲 write函数调用后并非立即传输数据&#xff0c;read函数调用后也非马上接收数据。write函数调用瞬间&#xff0c;数据将移至输出缓冲&#xff1b;read函数调用瞬间&#xff0c;从缓冲读取数据。 这些IO缓冲特性可整理如下。 口IO缓冲在每个TCP套接字中单…

VMware Ubuntu虚拟机上设置SSH连接,win直接用ssh连接虚拟机

要在Ubuntu虚拟机上设置SSH连接&#xff0c;并进行一些特定配置&#xff0c;您可以按照以下步骤进行操作&#xff1a; 步骤 1&#xff1a;安装OpenSSH Server 打开终端。 更新包列表并安装OpenSSH Server&#xff1a; sudo apt update sudo apt install openssh-server安装完…

cdh zookeeper报错 Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。

我一直纳闷这个是什么问题&#xff0c;搜索了半天没有结果&#xff0c;因为别人没有遇到过。后面我重新搭建了另一套cdh&#xff0c;然后看了一下默认的配置&#xff0c;然后更新上去才发现的。 这里面的clientPortAddress不要手动设置端口号。 别勾选通信验证 不要开启TLS/SS…

多模态大模型:识别和处理图片与视频的技术详解

多模态大模型&#xff1a;识别和处理图片与视频的技术详解 多模态大模型&#xff1a;识别和处理图片与视频的技术详解1. 什么是多模态大模型&#xff1f;2. 多模态大模型的基本架构3. 识别和处理图片3.1 图像特征提取3.2 图像分类与识别3.3 图像生成与增强 4. 识别和处理视频4.…

Linux内核同步机制有哪些?【面试】

在Linux内核中&#xff0c;同步机制是确保在多线程或多任务环境中对共享资源正确访问的关键技术。以下是一些Linux内核中常用的同步机制要点&#xff1a; 自旋锁&#xff08;Spinlocks&#xff09;&#xff1a; 自旋锁是一种忙等待锁&#xff0c;适用于持有时间短的场合。如果一…

Android SDK版本号与API Level 的对应关系

自从Android 1.5系统以来&#xff0c;谷歌习惯于用甜点为每个版本的移动操作系统命名&#xff0c;而且按字母顺序排列&#xff0c;这个传统始于八年多以前&#xff0c;从早期的Android1.5 C&#xff08;Cupcake&#xff09;、Android 1.6 D&#xff08;Donut&#xff09;到最近…

ABB控制主板3BHE024855R0101 UF C921 A101

控制板也是一种电路板&#xff0c;其运用的范围虽不如电路板来的宽泛&#xff0c;但却比普通的电路板来的智能、自动化。简单的说&#xff0c;能起到控制作用的电路板&#xff0c;才可称为控制板。大到厂家的自动化生产设备&#xff0c;小到孩童用的玩具遥控汽车&#xff0c;内…

.NET MAUI Sqlite程序应用-数据库配置(一)

项目名称:Ownership&#xff08;权籍信息采集&#xff09; 一、安装 NuGet 包 安装 sqlite-net-pcl 安装 SQLitePCLRawEx.bundle_green 二、创建多个表及相关字段 Models\OwnershipItem.cs using SQLite;namespace Ownership.Models {public class fa_rural_base//基础数据…

无线网络与物联网技术[1]之近距离无线通信技术

无线网络与物联网技术 近距离无线通信技术WIFIWi-Fi的协议标准Wi-Fi的信道Wi-Fi技术的术语Wi-Fi的组网技术Ad-hoc模式无线接入点-APAP&#xff1a;FAT AP vs FIT AP Wi-Fi的特点与应用Wi-Fi的安全技术 Bluetooth蓝牙技术概论蓝牙的技术协议蓝牙的组网技术微微网piconet(了解)散…

前端场景题:实现监控请求时常

实现思路&#xff1a;对请求与响应进行拦截&#xff0c;通过在header中使用performance.now()记录的时间来获取精确的请求时常 以vue中封装的axios为例&#xff1a; import axios from "axios";const service axios.create({baseURL: "http://localhost:5000…

Python爬虫技术,爬取网站数据、电影、资源等等

一般爬虫都是使用 Python 语言&#xff0c;并借助一些爬虫库&#xff0c;比如 requests 和 BeautifulSoup。代码如下&#xff1a; import requests from bs4 import BeautifulSoup# 目标URL url http://example.com# 发送HTTP请求 response requests.get(url)# 检查请求是否…