Apache配置服务器站点
Apache介绍
Apache VirtualHost是实现让一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名.
Apache配置文件结构介绍:
Ubuntu:系统
/etc/apache2/
|-- apache2.conf
|-- ports.conf
|-- mods-enabled
– *.load
– *.conf
|-- mods-available
– *.load
– *.conf
|-- conf-enabled
– *.conf
|-- conf-available
– *.conf
|-- sites-enabled
– *.conf
|-- sites-available
– *.conf
其中apache2.conf为主配置文件,其中Include了将conf-enabled及sites-enabled文件夹下的 *.conf配置文件。(*.conf这里是指所有xxx.conf)。
/var/www/html/index.html为默认的测试页面。
000-default.conf为默认的测试站点配置文件,配置了上述页面,当000-default.conf被加载,则网页登录站点时,显示/var/www/html/index.html内容。
使用a2dissite 000-default.conf可以移除该默认配置站点。conf用来配置apache的一些自身配置,如log一类。
site则是用来配置站点的配置文件。
mod则是apache加载的一些模块,如ldap,ssl等。
带available标签的文件夹存放的只是支持但是没有被加载的配置文件或模块。
带enabled标签的文件夹存放的是要被加载的配置文件及模块。
在conf-available及sites-available创建想要加载的配置文件,在conf-enabled及sites-enabled创建对应的软连接(ln -s xxx-available/xxx.conf xxx-enabled/xxx.conf),重启apache2即可加载。下面介绍的apache的命令也可实现软连接功能。
对于opensuse等一些系统,可能配置文件结构有所不同,apache的配置文件也在etc/apache2/下,但是主配置文件是http.conf。虚拟站点配置文件在vhost.d/下,但是配置文件的格式相同。
apache安装
sudo apt-get update
sudo apt-get install apache2
源码安装:
apr
apr-util
pcre
httpd
详细参考步骤见参考
配置文件管理命令
a2enmod用于加载指定模块
a2dismod用于移除指定模块
a2ensite用于加载站点配置文件
a2dissite用于移除指定站点配置
a2enconf用于加载指定配置文件
a2disconf用于移除指定配置
重启apache(加sudo)我用第一条指令,指令有差异,具体差异不是很清楚。
service apache2 restart
/etc/init.d/apache restart
apachectl restart
站点配置文件
一般http使用80端口;https使用433端口。
可以使用 netstat -antpu | grep 80来查看端口使用情况。
可在/etc/apache2/ports.conf中设置监听多个端口,使得访问多个虚拟主机,比如访问127.0.0.1:90和127.0.0.1:9001返回不同的内容
example.conf
#配置默认host的443端口
<VirtualHost *:443>
#设定服务端的联系邮箱
ServerAdmin [email protected]
#设定域名
ServerName xxx.com
#网页端登录时,显示该目录下的index.html文件。没有下方可配置登录时显示服务器目录结构 <Directory /xxx/xxx/>
DocumentRoot "/xxx/xxx/"
#ssl认证
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/xxx.crt
SSLCertificateKeyFile /etc/apache2/ssl/xxx.key
#log存储及级别
ErrorLog /var/log/apache2/xxx-error.log
LogLevel warn
CustomLog /var/log/apache2/xxx-access.log combined
#配置web界面显示服务器上的文件及登录方式,下方是ldap登录认证
<Directory /xxx/xxx/>
Options Indexes FollowSymLinks
允许登录
Allow from all
AuthName "Login with your gerrit Account"
AuthType Basic
AuthBasicProvider ldap
#ldap登录认证
AuthLDAPURL "ldap://ldap.xxx.com/xxx"
require ldap-filter |(gidNumber=xxx)(gidNumber=xxx)
</Directory>
</VirtualHost>
主要需要配置ServerName及 DocumentRoot。
生成自签证书的命令:
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
服务器使用自签证书,在网页登录服务器时,会收到警告,添加例外才能进行访问。
如果要配置ldap则ldap的相关模块(authnz_ldap、ldap)需要加载(a2enmod ldap)。
同样可配置80端口
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName xxx.com
#rewrite将端口数据转发
RewriteEngine On
#http得到数据后,80端口监听处理,这里配置使用https访问,从而实现http到https的转发处理。
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=permanent,L]
</VirtualHost>
配置步骤:
- 安装apache;
- 写要建立的站点的site 配置文件,放在site-available下;
- 利用a2ensite或者ln -s在site-enabled下创建对应软连接,从而在下一次启动apache时加载配置文件。应该需要reload apache,按照提示操作;
- 重启apache,sudo service apache2 restart。
其中遇到的问题
- AH00558: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain. Set the ‘ServerName’ directive globally to suppress this message.
解决:
把主配置文件apache2.conf(suse系统是httpd.conf)中的 ServerName 改成可用域名
ServerName domain_name:80
或者本地主机
ServerName localhost:80 - 403 Forbidden
Access to this resource on the server is denied!
解决:
1)DocumentRoot对应的路径权限不对,需为775
chmod 775 DocumentRoot_path
2)站点配置文件中 <Directory /xxx/xxx/>中的 Allow from all需配置 - AH00526: Syntax error on line 5 of /etc/apache2/sites-enabled/xxx.conf:
Invalid command ‘RewriteEngine’, perhaps misspelled or defined by a module not included in the server configuration
Action ‘configtest’ failed.
解决:
sudo a2enmod rewrite
sudo service apache2 restart - AH00526: Syntax error on line 34 of /etc/apache2/sites-enabled/xxx-ssl.conf:
Unknown Authn provider: ldap
Action ‘configtest’ failed.
解决:
a2enmod authnz_ldap
sudo service apache2 restart
TIPS:
- 系统的域名解析是通过/etc/hosts内容寻找ip与域名的对应关系的,出现unknown host,则一般是域名与ip对应关系,没有配置在/etc/hosts中。建好的站点,其他机器想访问该服务器的站点,只能在浏览器中输入服务器ip来访问,如果在客户机上/etc/hosts上写入对应关系,则在此客户机上直接域名访问服务器。如果要使一个局域网下都能解析,一般需要找IT有权限去配置。
- apache log存放在/var/log/apache2下,出现问题多看log。
- 在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。参见百度百科。
- VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。使用加密技术实现专网远程通讯。参见百度百科。
- 公私钥
公私钥是非对称加密方式,每个人都可以有自己的公私钥,私钥留给自己,公钥发给需要通讯的人。自己使用私钥加密文件,发送给有自己公钥的其他人,其他人通过发送文件人的公钥解密文件。其他人通过公钥加密文件,发送给对应私钥的人,收到邮件的人使用私钥解密查看。证书则是用来验证文件发送人的身份。
参考文献
使用apache搭建web网站
ubuntu14.04系统下搭建支持https的apache2服务器
ubuntu下apache2使用的简单总结
ubuntu下apache虚拟主机出现forbidden错误的解决办法
Ubuntu16.04+Apache虚拟主机配置详解
Ubuntu 中 Apache2 安装、配置、卸载
如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器
Apache服务器配置多个站点的方法
上一篇: go流程控制
下一篇: php链式操作的实现方法有哪些