一、Apache WEB服务器简介
- Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
- Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
- Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。
- Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
二、进程与线程概念及区别
- 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
- 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
进程线程的对比
- 从概念上:
- 进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位。
- 线程:一个进程内的基本调度单位。
- 线程的划分尺度小于进程,一个进程包含一个或者更多的线程。
- 进程是系统进行资源分配和调度的一个独立单位.
- 本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
- 从执行过程中来看:
- 进程:拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。
- 线程:每一个独立的线程,都有一个程序运行的入口、顺序执行序列、和程序的出口。但是线程不能够独立的执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 从逻辑角度来看:(重要区别)
- 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源分配。
三、服务安装
- YUM安装,命令
yum install httpd -y
- 相关文件位置
[root@mini ~]# rpm -ql httpd
/etc/httpd/conf #配置文件
/etc/rc.d/init.d/httpd #启动文件
/usr/sbin/httpd #命令文件
- 源码包安装
apache官网http://httpd.apache.org/
在download页面找到对应的版本右键复制链接
[root@mini ~]# cd /usr/src/ #切换下载目录
[root@mini src]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.34.tar.gz #下载源码包
[root@mini src]# tar -xzf httpd-2.2.34.tar.gz #解压源码包
[root@mini src]# cd httpd-2.2.34 #进入源码包
[root@mini httpd-2.2.34]# ls #查看源码包内容
ABOUT_APACHE CHANGES httpd.dsp libhttpd.dep NOTICE server
acinclude.m4 config.layout httpd.mak libhttpd.dsp NWGNUmakefile srclib
Apache.dsw configure httpd.spec libhttpd.mak os support
build configure.in include LICENSE README test
BuildAll.dsp docs INSTALL Makefile.in README.platforms VERSIONING
BuildBin.dsp emacs-style InstallBin.dsp Makefile.win README-win32.txt
buildconf httpd.dep LAYOUT modules ROADMAP
[root@mini httpd-2.2.34]# ./configure --prefix=/usr/local/apache2/ --enable-rewrite --enable-so #预编译,指定安装目录,添加rewrite模块,so可以动态扩展模块
[root@mini httpd-2.2.34]# make #编译
[root@mini httpd-2.2.34]# make install #安装
查看配置文件启动文件
配置文件位置/usr/local/apache2/conf/httpd.conf
启动文件位置/usr/local/apache2/bin/apachectl及/usr/local/apache2/bin/httpd
配置文件中查看网站发布目录105 DocumentRoot "/usr/local/apache2/htdocs"
该目录下只有默认的引导页index.html
,也可以创建其他网页文件如test.html
通过http://192.168.15.138/test.html
来访问.
[root@mini httpd-2.2.34]# cd /usr/local/apache2/ #切换安装目录
[root@mini apache2]# ls #查看目录
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
启动服务,下面两条命令等价,但是httpd
要加参数-k
,两种命令后面加-t
可以检查主配置文件是否正确
/usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/httpd -k start
平滑重启命令,和nginx的reload类似
/usr/local/apache2/bin/httpd -k graceful
强制终结httpd服务,强杀所有服务进程
pkill httpd
强制杀掉某个进程
kill -9 PID
后期追加模块
调用/usr/local/apache2/bin/apxs
故障排查
安装完成后启动报错
[root@mini htdocs]# /usr/local/apache2/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for mini
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
错误就是因为未配置域名服务器或者域名服务器未能找到该域名的地址。把Apache服务的名称指定为本地IP地址,就不需要去通过DNS服务器去得到本机的IP地址,而localhost这个特殊的地址是由DNS自己本身实现的一个内置配置,所以这里用localhost也可以在本地完成地址的转换。
解决办法修改配置文件
[root@mini htdocs]# vim /usr/local/apache2/conf/httpd.conf
98 #ServerName www.example.com:80
99 ServerName localhost:80
- apache httpd服务主配置文件
ServerRoot "/usr/local/apache2/" #服务根目录,即安装路径
Listen 80 #服务监听端口,可变更
<IfModule !mpm_netware_module> #不引用模块
<IfModule !mpm_winnt_module>
User daemon #httpd服务使用者
Group daemon #httpd服务属组
</IfModule>
</IfModule>
ServerAdmin you@example.com #管理员邮箱地址
ServerName localhost:80
DocumentRoot "/usr/local/apache2//htdocs" #网站发布目录,可变更
<Directory /> #httpd根/目录权限设置
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
<Directory "/usr/local/apache2//htdocs"> #httpd发布目录权限设置
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module> #引用目录模块,设置用户访问网站的默认页面,可设置多个,先后顺序表示优先级
DirectoryIndex index.html test.html
</IfModule>
<FilesMatch "^\.ht"> #文件匹配模块,并对匹配到的对象设置相应的权限
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
ErrorLog "logs/error_log" #配置错误日志目录
LogLevel warn #日志报警记录级别:警告时记录日志,常见级别info|debug|error|warn
<IfModule log_config_module> #日志切割模块,设置相应的日志记录格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
<IfModule alias_module> #引用别名模块,设置对应的别名关系
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/apache2/cgi-bin"> #设置二级目录的权限
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
DefaultType text/plain #apache默认支持的类型
<IfModule headers_module>
RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module> #支持访问文件的格式
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule ssl_module> #调用SSL模块,加密传输相关设置
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
四、设置虚拟主机
用于在一台机器上配置多个发布目录
配置文件位置/usr/local/apache2/conf/extra/httpd-vhosts.conf
具体配置信息如下,多个主机配置不同的发布目录和域名。
##########vhosts conf ############ #注释语句,虚拟主机配置文件
NameVirtualHost *:80 #虚拟主机监听80端口
<VirtualHost *:80> #第一台虚拟主机
ServerAdmin webmaster@dummy-host.example.com #配置管理员邮箱
DocumentRoot "/usr/local/apache2/htdocs/www1/" #虚拟主机发布目录
ServerName www.jf1.com #第一个网站的域名
ServerAlias www.dummy-host.example.com #网站域名的别名,多个域名时使用
ErrorLog "logs/error_log" #错误日志配置信息
CustomLog "logs/access_log" common #配置访问日志
</VirtualHost>
然后在apache的配置文件中引用虚拟主机模块
[root@mini extra]# vim /usr/local/apache2/conf/httpd.conf
428 Include conf/extra/httpd-vhosts.conf #在末尾添加引用模块的信息
检查配置文件/usr/local/apache2/bin/apachectl -t
重启httpd服务/usr/local/apache2/bin/apachectl restart
企业实际生产配置
直接在/usr/local/apche2/conf/httpd.conf
主配置文件中引用一个目录,该目录下每个虚拟主机就是一个单独的配置文件
[root@mini extra]# vim /usr/local/apache2/conf/httpd.conf
NameVirtualHost *:80 #如果放在虚拟主机配置文件第一句会有报警,这里是把虚拟主机拆分存放
Include conf/vhosts/* #这里是相对路径,引用安装包目录下conf目录下的vhosts目录下的所有文件
[root@mini extra]# mkdir -p /usr/local/apache2/conf/vhosts # 创建虚拟主机配置文件所在的目录,即配置文件引用目录
[root@mini vhosts]# vin /usr/local/apache2/conf/vhosts/www.jf1.com #创建网站1的虚拟主机配置文件
##########vhosts conf ############
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/apache2/htdocs/www1/"
ServerName www.jf1.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/error_log"
CustomLog "logs/access_log" common
</VirtualHost>
网友评论