欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apache配置服务器站点

程序员文章站 2022-03-04 18:59:28
...

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>

配置步骤:

  1. 安装apache;
  2. 写要建立的站点的site 配置文件,放在site-available下;
  3. 利用a2ensite或者ln -s在site-enabled下创建对应软连接,从而在下一次启动apache时加载配置文件。应该需要reload apache,按照提示操作;
  4. 重启apache,sudo service apache2 restart。

其中遇到的问题

  1. 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
  2. 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需配置
  3. 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
  4. 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:

  1. 系统的域名解析是通过/etc/hosts内容寻找ip与域名的对应关系的,出现unknown host,则一般是域名与ip对应关系,没有配置在/etc/hosts中。建好的站点,其他机器想访问该服务器的站点,只能在浏览器中输入服务器ip来访问,如果在客户机上/etc/hosts上写入对应关系,则在此客户机上直接域名访问服务器。如果要使一个局域网下都能解析,一般需要找IT有权限去配置。
  2. apache log存放在/var/log/apache2下,出现问题多看log。
  3. 在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。参见百度百科
  4. VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。使用加密技术实现专网远程通讯。参见百度百科
  5. 公私钥
    公私钥是非对称加密方式,每个人都可以有自己的公私钥,私钥留给自己,公钥发给需要通讯的人。自己使用私钥加密文件,发送给有自己公钥的其他人,其他人通过发送文件人的公钥解密文件。其他人通过公钥加密文件,发送给对应私钥的人,收到邮件的人使用私钥解密查看。证书则是用来验证文件发送人的身份。

参考文献

使用apache搭建web网站
ubuntu14.04系统下搭建支持https的apache2服务器
ubuntu下apache2使用的简单总结
ubuntu下apache虚拟主机出现forbidden错误的解决办法
Ubuntu16.04+Apache虚拟主机配置详解
Ubuntu 中 Apache2 安装、配置、卸载
如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器
Apache服务器配置多个站点的方法

相关标签: 工具