Apache(httpd)安装和配置

一、什么是Apache?

         Apache(或httpd)服务,是Internet上使用最多的Web服务器技术之一,通俗来讲就是一个用于搭建网站的服务。作用解析网页语言,如html,php,jsp等、接收web用户的请求,并给予一定的响应。

有两个版本:

  • http:超文本传输协议,通过线路以明文形式发送,默认使用80端口/TCP
  • http:经TLS/SSL安全加密的超文本传输协议,默认使用443端口/TCP

二、Apache的配置文件

1、配置文件的位置
配置文件存放位置
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
虚拟主机的配置文件目录 /etc/httpd/conf.d
基于用户的配置文件 /etc/httpd/conf.d/userdir.conf
日志文件目录 /etc/httpd/logs
默认的网站数据目录 /var/www/html

2、主配置文件的重要参数

主配置文件:/etc/httpd/conf/httpd.conf

参数作用参数作用
ServerRoot 服务目录 ServerName 网站服务器的域名
Listen 监听的IP地址与端口号 DocumentRoot 默认网站数据目录
User 运行服务的用户 Directory 文件目录的权限
Group 运行服务的用户组 DirectoryIndex 默认的索引页页面
ServerAdmin 管理员邮箱 ErrorLog 错误日志文件


      搭建Apache服务器

准备:配置网络; yum源; 一台Server端、一台Client端(图形)、一台Client端(命令)

任务一:配置简单的httpd服务

server端安装:

一、安装httpd服务

yum -y install httpd

rpm -qa | grep httpd

 

二、配置防火墙并重启服务

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

firewall-cmd --reload

systemctl restart httpd

systemctl enable httpd

Client端访问:

        有图形化(firefox):http://( Server ip)

         没有图形化: curl http://(Server ip)

 wind客户端测试:cmd -- curl http://(server IP)

 

任务二:配置基于用户的个人网站(已安装httpd服务)

server端配置:

一、新建用户(网站基于该用户)并修改用户网页文件访问权限

useradd lpm

passwd lpm

使其他用户具有读取和执行的权限: 

chmod -R 705 /home/lpm

二、创建个人网页文件

新建一个文件夹mkdir /home/lpm/public_html

到该路径下:   cd /home/lpm/public_html

写入内容:     echo "hello,欢迎访问lpm的个人网站">>index.html

三、修改基于用户的httpd配置文件

vim /etc/httpd/conf.d/userdir.conf

第17行,改为开启,表示开启个人用户主页功能:  UserDir enabled   

第24行,去注释,表示网站数据在用户家目录中的名称: UserDir public_html  

四、修改selinux权限、配置防火墙、重启

getsebool -a | grep home

setsebool httpd_enable_homedirs on

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

firewall-cmd --reload

systemctl restart httpd

 

Client端访问:

图形化:http://ip/~lpm/   (例:http://192.168.90.10/~lpm/)

命令行:curl http://ip/~lpmp/

 windows验证curl http://192.168.130.10/~lpm/

 

任务三:配置基于域名访问的虚拟机

1、新建虚拟主机的网页文件

2、配置虚拟主机的文件

3、做域名解析文件

4、配置防火墙(同上)

5、修改虚拟主机网页文件的selinux上下文类型

6、重启服务

7、使用浏览器访问

 

本文转载于网络 如有侵权请联系删除

相关文章

  • java如何实现封装_java如何实现封装

    大家好,又见面了,我是你们的朋友全栈君。Java中类的封装是如何实现的封装是将对象的信息隐藏在对象内部,禁止外部程序直接访问对象内部的属性和方法。java封装类通过三个步骤实现:(1)修改属性的可见性,限制访问。(2)设置属性的读取方法。(3)在读取属性的方法中,添加对属性读取的限制。Java中什么叫封装呢?继承和多态都明白些,就是封装理解不上去,老师没关于这个问题,我想举一个例子:lz如果你接触过老的面向过程的编程,以前封装性很差的程序是这样的比如用C写一套处理链表的程序,他的数据和函数是分开的数据保存在一个内存区域里,所有相关的函数,比如增加节点啊。java如何把一个已经实现某些具体功能的类封装成一第一:具体的功能方法如果是public直接就可以用import引入该类然后调用第二:如果这功能是类似于.exe可执行文件或者打包成了.jar的可执行文件,那么Java中有固定的代码可以内嵌运行已经实现功能的程序第三:如果你说的其他程序。java中的封装究竟怎样理解呢?对于这个不是很理解呀,各位大侠帮帮忙呀……欢迎来到CSS布局HTML,这个一下子确实不好理解。你要在你以后的开发中去慢慢体

  • 8 - Array 的实例方法一

    原文地址:https://dev.to/bhagatparwinder/array-instance-methods-59a2Array的实例方法存在于prototype上。concat返回数组和另一数组或值连接返回的新数组。constarray1=["a","b","c"]; constarray2=["d","e","f"]; constarray3=array1.concat(array2); console.log(array3);//["a","b","c","d","e","f"]复制你也可以使用数组连接一个值:constletters=["a","b","c"]; constalphaNumeric=letters.concat(1,[2,3]); console.log(a

  • JAVA垃圾回收机制 - GC

    OOM,你好听说面试的java的人,总会被问你懂JVM么,知道垃圾回收机制么,进行过高并发编程么。自己在开发过程中也会遇到java.lang.OutOfMemoryError这样的错误,简称内存溢出OOM。OOM出现的原因归根结底就是运行Java程序的堆内存满了,jvm就开始清理垃圾,又因为可清理的垃圾很少,内存还是不够用,或者基本上没有垃圾,导致程序没有内存可以用了,只能通过OOM宣布自己崩了。有的同学就说了,我可以通过-Xmx1024m来增加我的程序内存为1G或者更大,这样OOM就不会出现了。其实不然,当对象无法回收的时候在某一时刻还是会OOM。那到底什么是可回收,什么无法回收。谁是垃圾垃圾的真实面目还是对象。只是用完了没人再用了就变成了垃圾。怎么判断对象是否可用呢,有一种算法叫做可达性算法,说白了就是new出来的对象没有被引用的时候,就是不可达的,就成了垃圾。例如下面代码:publicclassTest{ publicstaticvoidmain(String[]args){ GirlFriendgirl=newGirlFriend(); //girl指向了null,不再指向ne

  • 延迟反馈带来的样本偏差如何处理

    作者:十方在广告系统中,转化率预估是个非常常见的任务,但是转化行为的发生时间往往发生在点击行为后很久,这样就产生了一个很严重的问题.转化率模型需要不断更新,但是产生点击的数据又不能及时用于转化率预估,也就是我们常说的延迟反馈问题.以前的方法往往预留一个时间窗口,超过这个窗口的样本会当作负样本,如果该样本后续又发生了转化,那又会多一条正样本注入模型,这样就会带来样本偏差.所以这篇论文<RealNegativesMatter:ContinuousTrainingwithRealNegativesforDelayedFeedbackModeling>给出了解决方案.延迟反馈建模转化率预估本质就是个二分类问题,每个样本会被打上{0,1}的标签,但是由于延迟反馈问题,如下图所示,在等待窗口中发生转化的都被标为正确的样本,但是超出这个窗口后就有被标为负样本但实际是正样本的风险.一个非常navie的想法就是扩大等待窗口.但是在广告系统中数据分布是在动态变化的,扩大等待窗口会导致模型学习不够充分.下图左表示的是以前的方法,假的负例在转化发生后又会复制一份,作为正例输入到模型中,右图中我们可

  • 入门深度学习仅2个月,我从BoTNet论文复现中经历了这些~

    深度卷积骨干结构在图像分类,实例分割等方面取得了重大进展,多种具有里程碑意义的骨干网络结构大多都使用多层3X3卷积。虽然卷积运算可以有效地捕获局部信息,但目标检测、实例分割、关键点检测等视觉任务需要对长距离依赖进行建模。为了全局聚合本地捕获的滤波器响应,基于卷积的架构需要堆叠多个层。尽管堆叠更多层确实提高了这些主干的性能,但一种对全局依赖项建模的显式机制可能是一种更强大和可扩展的解决方案,而无需那么多卷积层。业界从自然语言处理(NLP)任务中汲取灵感,在视觉任务中使用Transformer中的多头自注意力(MHSA)层替换空间卷积层,进而诞生了BotNet这一革新的网络。CVTransformer的时代已经到来! 本项目已在AIStudio开源,可与此文档一同观看,有助于更好的了解。项目地址:https://aistudio.baidu.com/aistudio/projectdetail/2265776BotNet介绍由于BotNet与ResNet极为相似,这里我们以BotNet-50与ResNet-50相比较,来让大家更好的理解BotNet的网络结构。BotNet即将ResNet中

  • 【图解】拥塞控制

    文章目录拥塞控制探测网络拥塞情况超时==拥塞? 拥塞控制与网络的拥堵情况相关联,而流量控制与接收方的缓存状态相关联。拥塞控制了解TCP三次握手的朋友都知道,两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发送的数据包丢失了,进而会重新传输这个丢失的数据包。然而实际情况有可能此时有太多主机正在使用信道资源,导致网络拥塞了,发送的数据包被堵在了半路,迟迟没有到达。这个时候发送方误认为是发生了丢包情况,会重新传输这个数据包。结果就是不仅浪费了信道资源,还会使网络更加拥塞。因此,我们需要进行拥塞控制。探测网络拥塞情况无论如何,在探测的过程中都会出现瓶颈,或者说,类似于天花板了。 为了平衡各方面效率,使用以下方式:前期指数增长,到达阈值之后,就以一个一个线性的速度来增长。我们也把指数增长阶段称之为慢启动,线性增长阶段称之为拥塞避免。超时==拥塞?有可能是因为某个数据包出现了丢失或者损害了,导致了这个数据包超时事件发生了为了防止这种情况,我们是通过冗余ACK来处理的。我们都知道,数据包是有序号的,如果A给B发送M1,M2,M3,M4,M5…N个数据包,如

  • Canvas 动画引擎解析与微信小程序中的应用

    点击观看大咖分享抗击疫情,腾讯云在行动。在开发微信小程序的过程中,我们经常需要展现一些图形和图表。目前市面上有好几款常用的图形库,在这些图形库的底层都有渲染引擎在支撑。ZRender是其中一款非常优秀的Canvas动画引擎,它也是ECharts图表库底层的渲染引擎。本次腾讯云大学大咖分享课程邀请腾讯云最具价值专家TVP章小飞分享关于“Canvas动画引擎解析与微信小程序中的应用”课程的内容。作者简介:章小飞腾讯云最具价值专家(TVP)/前端技术专家。网名大漠穷秋,先后使用并研究过Flex、jQuery、Extjs、Backbone、AngularJS等常见的前端开发框架。先后著、译有《Ext江湖》《ActionScript3.0游戏设计基础》《用AngularJS开发下一代Web应用》(2013年最佳引进技术图书)《迈向Angular2》等书籍。对技术拥有无限热情,热爱分享,曾在30多家企业,多个线上和线下大会进行过前端技术的宣讲和传播。本次分享内容:1、QuarkRenderer引擎可以用来做什么? 2、Canvas、SVG和WebGL 3、人们一直在追求60fps的极致体验 4、r

  • 你可能从不知道的ICON分类

    图标设计,是ui设计中的最重要的设计元素之一,优秀的图标其识别性会让人一眼看出它的含义,而不需要大量的文字说明;图标其实分为有很多种风格,大致可以分为以下几种剪影风格扁平化风格拟真风格写实风格手绘风格游戏风格3d立体风格以及动态图标 下面是一组MaterialDesign图标赏析

  • 学习HTML的笔记

    不知不觉我已经踏上了这条程序猿的不归路,从最基础的HTML标签开始学习,道阻且艰。谨用简书来记录这些即使敌众我寡,末将亦能万军丛中取敌将首级!框架公司开发流程 产品需求:由产品经理给出注意最好要有文档 产品设计:视觉设计师和交互设计师 前端开发: 后台开发: 测试: 上线运营:前端的三要素 HTML结构 CSS行为 JS样式 HTML的基本结构我就不说了CSS又称层叠样式表内联(行间)样式表在标签内部书写 优点:优先级非常高 缺点:代码非常多,维护非常困难 使用场景:针对个别特殊的进行修饰内部样式表:head标签的内部用<style></style> 优点:一定程度上实线代码和样式的分离,速度块,没有额外的服务器的请求压力缺点:造成单个页面体积过大代码较乱,前后端沟通困难使用场景:大型网站的首页外部样式表:head标签的内部用<linkrel="stylesheet"type="text/css"href="文件路径"> 优点:复用性强,一个样式表可用于多个页面,维护方便,便于改变,代码简洁

  • 羊了个羊,手把手通关教程

    前言9月15日的时候,羊了个羊大火,想必大家都玩过很多次了,我也试着玩了一下,第二关确实很难!能过关的人寥寥无几,好像游戏设计者故意设置不让你过的...既然是这样的设计,那么只能用魔法来打败魔法了!!然后就用了个Python脚本,结果就是下面这样,直接过关!你想通关了就运行一下脚本,想过多少次关就设置一下通关次数就可以!然后这几天就有很多小伙伴来问我是怎么做到了,开始我一个一个回答了怎么操作的,但是后面实在是精力有限,所以心想还是写个手把手教程吧,一劳永逸!原理先简单说下脚本的原理,其实就是向游戏发送一个通关的请求,发送成功后即代表成功通关!但是在发送的时候需要携带token,类似大家登陆淘宝的时候的密码而这个token通过抓包工具来获取就能得到,每个用户的token都是唯一的所以接下来的关键就是抓包了!抓包这里介绍两种抓包方式!分别是手机端和电脑端!!我用的是苹果手机,在手机端用Stream抓的包,可以在appstore直接搜索安装抓包1.先在微信上点开游戏羊了个羊,进入首页然后点开抓包工具,点击开始抓包回到游戏羊了个羊,点击开始游戏,进入第一关回到抓包工具,点击抓包历史,随便选择一

  • Java守护线程「建议收藏」

    1、什么是守护线程Java线程分两种:用户线程和守护线程。守护线程,是指在程序运行的时,后台提供一种通用服务的线程。比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没有本质的区别,不同之处在于虚拟机的离开;若用户线程已全部退出运行,只剩守护线程存在,虚拟机也即退出。因没有了被守护者,守护线程也就无工作可做,也就没有继续运行程序的必要了。将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点:(1)thread.setDaemon(true)须在thread.start()之前设置,不能把正在运行的常规线程设置为守护线程,否则会抛出IllegalThreadStateException异常。(2)在Daemon线程中创建的新线程也是Daemon的。(3)守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作

  • 51nod 1275 连续子段的差异

    题目看这里 若[i,j]符合要求,那么[i,j]内的任何连续的子段都是符合要求的。我们可以枚举i,找到能合格的最远的j,然后ans+=(j-i+1)。 那么问题就转换成了:在固定i的情况下,如何判断j范围内是否合法?若[i,j]内的max-min<=K自然就合法。于是相当于求区间内的最值问题。这个可以用单调队列解决。 下面对代码给出一些解释: 1:为何是j-i而非j-i+1?因为当不合法时区间相当于[i,j),左闭右开,数量是i-j即可。 2:后面的两行如if(dqB.front()==i)dqB.pop_front();什么作用?因为要枚举i,所以到了下一个i的时候,若前面的i还在队列中,要去掉。 #include<bits/stdc++.h> usingnamespacestd; constintmaxN=5e4+5; intN,M,K,T; intg[maxN]; deque<int>dqB,dqS; intmain(){ #ifndefONLINE_JUDGE freopen("data.in","r",stdin); #endif scan

  • python 做回归

    1一元线性回归 线性回归是一种简单的模型,但受到广泛应用,比如预测商品价格,成本评估等,都可以用一元线性模型。y=f(x)叫做一元函数,回归意思就是根据已知数据复原某些值,线性回归(regression)就是用线性的模型做回归复原。 基本思想:已知一批(x,y)来复原另外未知的值,例如(1,1),(2,2),(3,3),那么(4,?),大家很容易知道(4,4),这就是一元线性回归求解问题 importnumpyasnp importmatplotlib.pyplotasplt frommatplotlib.font_managerimportFontProperties fromsklearn.linear_modelimportLinearRegression x=[[1],[2],[3],[4],[5],[6]] y=[[1],[2.1],[2.9],[4.2],[5.1],[5.8]] model=LinearRegression() model.fit(x,y) predicted=model.predict([13])[0] x2=[[0],[2.5],[5.3],[7

  • 【POJ 2152】Fire

    题目大意 给你一颗树,每个点都有一个\(w\)值,代表在这个点修建工程需要花费\(w\),还有一个\(d\)值,代表离这个点距离小于\(d\)的点可以作为这个点的建立工程的点。每条边都有权重,求出覆盖所有点的最小花费。 思路 首先分析,是否具有最优子结构性质,发现任意一颗子树的最小值,都满足最优子结构。考虑动态规划的做法。 这个题的难点在于可以选一个点来覆盖其他点,所以我们的一个想法必然是枚举这个被选取的点。 设\(dp_{u,j}\)表示以\(u\)为根节点的子树,依赖于\(j\)节点(其中\(u\)节点一定依赖\(j\)节点,其他节点可以依赖别的)的最小值,\(ans_u\)表示覆盖这颗子树的最小值。 这两个状态之间的区别和联系是什么?其实\(dp_{u,j}\)是为了维护当前子树与它的父亲及以上节点的关系,而\(ans_u\)则是我们的普通动态规划设计的状态。 所以这题的关键在于将\(dp\)向\(ans\)转化。 \(dp_{u,j}=\sum_{\text{edge}(u\rightarrowv)}(dp_{v,j}-w_j,ans_v)\),意思是,u点已经确定要选j点了,

  • 《中国文明史》系列—诗亡然后春秋作

      诗亡然后春秋作,这句话相信大家都不陌生,可是它究竟是什么意思,为什么会这样,知道的人恐怕就不多了。诗,这里指的是《诗经》,被孔子删改之前的《诗经》;春秋,是四书五经里的春秋,即孔子所作的《春秋》。在中学的教材里,时不时会选用一些《诗经》里的原文,如“关关雎鸠,在河之洲。窈窕淑女,君子好逑……”,如“硕鼠硕鼠,无食我黍!三岁贯女,莫我肯顾……”。而《春秋》,其实我也没看过,不过能把它纳入四书五经,我们也大概知道它是什么样子的了。大体说来,《诗经》源于民间,里面有对男欢女爱的描述,有对统治阶级的抨击,是人们内心情感的真实表达。它像荷马史诗,有血有肉,有笑有泪,所以不需要推广,就可以远而播之。可以说,《诗经》是远古人民的论坛。而《春秋》,作为几千年来知识分子的教科书,则完全是为政治服务的。   了解了《诗经》和《春秋》的大概定位,那么,为什么会诗亡然后春秋作呢?是诗自然而然地消亡了,为了弥补空白,才出现了春秋,还是春秋给诗掘了坟墓呢?之前所说的《诗》里面有男欢女爱,有时事抨击,无所不包,无所不含,那是远古时代的事,西周之后,《诗》便改变了面目,而到了春秋时期,孔子又对其动了大手术。原本三

  • flex 布局的页面

    <!DOCTYPEhtml><html><head><title>横向滑动</title><styletype="text/css">.flex-row-wrap{ display:flex; flex-direction:row; flex-wrap:wrap;} .flex-row{ display:flex; flex-direction:row;} .form-row{ height:30px; line-height:30px; margin-bottom:12px; } .form-rowlabel{ min-width:120px; text-align:right; } .form-rowinput{ width:150px; margin-left:15px; }</style></head><body><divclass="flex-row-wrap"> <divclass="form-

  • python,基于tkinter模块编写的完整俄罗斯方块游戏代码

    使用python编写小游戏挺容易的,常用的模块是pygame,本文用tkinter,实现了俄罗斯方块小游戏,感觉还是比较容易的。 importtkinterastk importtime importrandom fromtkinterimportmessagebox importpygame pygame.mixer.pre_init(44100,-16,2,512) pygame.mixer.init()#初始化混音器 #读取最高纪录 withopen('record.txt','r')asf: record=int(f.read()) #定义游戏中的常量 R=20#20行 C=12#30列 cell_size=30#方块边长 withopen('speed.txt','r')asf: FPS=int(f.readline())#读取刷新时间 height=R*cell_size#画布高度 width=C*cell_size#画布宽度 #定义形状的座标矩阵 SHAPES={ 'O':[(-1,-1),(0,-1),(-1,0),(0,0)], 'S':[(-1,0),(0,

  • Remove Linked List Elements

    /* 题意:给一个链表以及一个val值要去除链表中与val值相等的节点 解法:给链表加一个头结点因为可能开始第一个节点值就与val值相等 方便操作,然后循环删除就好 */ /** *Definitionforsingly-linkedlist. *structListNode{ *intval; *ListNode*next; *ListNode(intx):val(x),next(NULL){} *}; */ classSolution{ public: ListNode*removeElements(ListNode*head,intval){ ListNode*Head=(ListNode*)malloc(sizeof(ListNode)); Head->next=head; ListNode*p=Head; while(p!=NULL&&p->next!=NULL){ ListNode*temp=p->next; while(temp!=NULL&&temp->val==val){ temp=temp->next;

  • 规范之UITableViewCell

    1,首先创建 UITableViewCell为项目所有cell的父类 重写方法 -(instancetype)initWithStyle:(UITableViewCellStyle)stylereuseIdentifier:(NSString*)reuseIdentifier;   UIScrollView的工作原理 当手指touch的时候,UIScrollView会拦截Event,会等待一段时间,在这段时间内,如果没有手指没有移动,当时间结束时,UIScrollView会发送trackingevents到子视图上。在时间结束前,手指发生了移动,那么UIScrollView就会进行移动,从而取消发送tracking。 那么,UIScrollView的子类想要接受touch事件,就是用户点击UIScrollView上的视图时,要先处理视图上的touch,而不发生滚动。这时候就需要UIScrollView的子类重载touchesShouldBegin:withEvent:inContentView:,从而决定自己是否接受子视图中的touch事件。   dela

  • python函数基础

    函数基础 函数的作用 函数就是包裹一部分的代码,实现某一个功能,达成某一个目的,而且当这段代码如果使用或者重复使用的时候,只需要很简单的调用即可,大大减少了代码的维护难度。 函数的特点 可以反复调用,提高代码的复用性,提升开发效率,便于维护管理。 函数的定义和调用 函数的定义要使用到关键字def,且函数定义不会执行函数中的代码,而是需要调用函数才会执行。 定义方法 定义函数在关键字def后面加上函数名,然后后面加上括号,括号中可以酌情选择是否写上参数,在对应的作用域中写上代码。 #语法: deffunction_name([parameter0],[parameter1]): code0 code1 code2 …… 复制 调用方法 直接使用定义好的函数的函数名加上括号,括号中写上对应的参数,就会执行作用域中的代码。 #语法: funciton_name([parameter0],[parameter1]) 复制 注意,只要函数只有在调用的时候才能执行其中的代码 定义一个没有参数的函数 #定义函数 deffunc(): print('thisisfunction') #调用函数 f

  • 2月27日

    昨天在弄校园的双选会,文本分类没改完,今天继续。

相关推荐

推荐阅读