您的位置:首页 > 理论基础 > 计算机网络

下载编译安装Apache HTTP Server 2.4.23以及配置HTTP/HTTPS反向代理

2016-10-24 11:40 603 查看
一,依赖软件:

1.1 GCC和C++编译器


- GCC

- C++ Compiler

1.1.1 如果没有安装以上依赖包请执行以下命令安装:

[root@xxx ~]# yum install -y gcc gcc-c++

1.1.2 如果已经安装其中一个,可以单独执行以下命令安装其中一个:

[root@xxx ~]# yum install -y gcc

[root@xxx ~]# yum install -y gcc-c++

* 如果没有安装GCC,在编译其它依赖包的时候会遇到以下错误:

configure: error: no acceptable C compiler found in $PATH.

* 如果没有安装C++ Compiler,在编译其它依赖包的时候会遇到以下错误:

configure: error: you need a C++ compiler for C++ support.

1.2 APR,APR-Util和PCRE

- Apache Portable Runtime (APR) 1.5.2 (大小807KB)

- Apache Portable Runtime Utility (APR-Util) 1.5.4(大小678KB)

- Perl-Compatible Regular Expressions Library (PCRE) 9.39 (大小1.48MB)

如果没有安装以上依赖包请执行以下命令下载,服务器需要能够访问外网:

[root@xxx ~]# wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.bz2
[root@xxx ~]# wget http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.bz2
[root@xxx ~]# wget http://ncu.dl.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.tar.bz2
如果不能访问外网,请另外下载然后上传到服务器

1.2.1 解压、编译、安装APR 1.5.2,先cd切换到压缩包所在目录:

[root@xxx ~]# tar xvf apr-1.5.2.tar.bz2

[root@xxx ~]# cd apr-1.5.2

[root@xxx apr-1.5.2]# ./configure --prefix=/usr/local/apr

[root@xxx apr-1.5.2]# make && make install

* 参数--prefix为指定安装目录(建议使用,下同),可以自行修改

1.2.2 解压、编译、安装APR-Util 1.5.4,先cd切换到压缩包所在目录:

[root@xxx ~]# tar xvf apr-util-1.5.4.tar.bz2

[root@xxx ~]# cd apr-util-1.5.4

[root@xxx apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@xxx apr-util-1.5.4]# make && make install

* 参数--prefix为指定安装目录,可以自行修改

* 参数--with-apr为指定上述APR的安装目录

1.2.3 解压、编译、安装PCRE 9.39,先cd切换到压缩包所在目录:

[root@xxx ~]# tar xvf pcre-8.39.tar.bz2 

[root@xxx ~]# cd pcre-8.39

[root@xxx pcre-8.39]# ./configure --prefix=/usr/local/pcre

[root@xxx pcre-8.39]# make && make install

* 参数--prefix为指定安装目录,可以自行修改

二,如果需要支持HTTPS,需要下载安装OPENSSL,版本需要>=0.98,本例使用1.0.2版本(大小5.06MB):

2.1 检查系统是否已经安装ssl还有版本:


[root@xxx ~]# openssl version

OpenSSL 1.0.0-fips 29 Mar 2010

或者执行:

[root@xxx ~]# rpm -qa|grep openssl

openssl-1.0.0-20.el6_2.5.x86_64

如果命令返回类似上述结果,证明系统已经安装,如果没有请参照下面步骤编译安装:

[root@xxx ~]# wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2i.tar.gz
如果不能访问外网,请另外下载然后上传到服务器

2.2 解压、编译、安装OPENSSL 1.0.2,先cd切换到压缩包所在目录:

[root@xxx ~]# tar xvf openssl-1.0.2i.tar.gz

[root@xxx ~]# cd openssl-1.0.2i

[root@xxx openssl-1.0.2i]# ./config -fPIC --prefix=/usr/local/openssl --openssldir=/usr/local/openssl

[root@xxx openssl-1.0.2i]# make && make install

* 参数--prefix,--openssldir为指定安装目录,可以自行修改

* make && make install安装步骤可能需要几分钟

2.3 之前试过使用1.1.0b版本(openssl-1.1.0b.tar.gz),但是在编译Apache HTTP Server 2.4.23的时候遇到以下错误,觉得是版本不兼容,所以使用openssl-1.0.2i版本:

ab.c:2416: warning: implicit declaration of function 'CRYPTO_malloc_init'

/usr/local/apr/build-1/libtool --silent --mode=link gcc -std=gnu99 -g -O2 -pthread......

ab.o: In function `main':

httpd-2.4.23/support/ab.c:2416: undefined reference to `CRYPTO_malloc_init'

httpd-2.4.23/support/ab.c:2357: undefined reference to `SSLv2_client_method'

三,下载Apache HTTP Server 2.4.23(大小6.05MB),服务器需要能够访问外网:

[root@xxx ~]# wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.23.tar.bz2
如果不能访问外网,请另外下载然后上传到服务器

3.1 解压、编译、安装Apache HTTP Server 2.4.23,先cd切换到压缩包所在目录:

[root@xxx ~]# tar xvf httpd-2.4.23.tar.bz2

[root@xxx ~]# cd httpd-2.4.23

[root@xxx httpd-2.4.23]# ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl=/usr/local/openssl --enable-modules=most

[root@xxx httpd-2.4.23]# make && make install

--prefix:指定安装目录

--with-pcre:pcre安装目录

--with-apr:apr安装目录

--with-apr-util:apr-util安装目录

--enable-ssl:启用ssl (如果不需要支持HTTPS,不需要添加此参数)

--with-ssl:openssl安装目录 (如果不需要支持HTTPS,不需要添加此参数)

其它参数为可选的,看个人需求

四,测试安装是否成功

4.1 修改ServerName


打开/usr/local/apache2/conf/httpd.conf文件(/usr/local/apache2是httpd的安装目录),查找ServerName,格式为以下所示,默认端口为80:

ServerName ip:80或者ServerName dns:80

修改后保存

* 如果不修改的话,启动的时候有可能会出现以下错误:

[root@xxx bin]# ./httpd -k start

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx. Set the 'ServerName' directive globally to suppress this message



4.2 绑定监听的ip和访问端口


打开/usr/local/apache2/conf/httpd.conf文件(/usr/local/apache2是httpd的安装目录),查找Listen,格式为以下所示,默认端口为80,如果需要监听其它端口,请修改:

#Listen ip:port

Listen 80

4.3 启动httpd

进入到bin目录,执行./httpd -k start

[root@xxx bin]# ./httpd -k start

httpd (pid 29502) already running

如果出现类似上述结果证明启动成功

4.4 页面验证

打开浏览器输入服务器的ip或者域名(如果上面使用非80端口,需要输入指定的端口),如果出现It works!证明启动成功

4.5 httpd重启、停止命令

./httpd -k restart|stop

五,修改默认启动group/user

httpd默认的启动group/user都是daemon,如有需要可以修改,步骤如下:

打开/usr/local/apache2/conf/httpd.conf文件(/usr/local/apache2是httpd的安装目录),查找User daemon,修改并保存,例如如果使用apache/apache启动的话,替换daemon:

User apache

Group apache

* 系统需要添加apache的group和user并且修改/usr/local/apache2的目录权限

* 启动的时候使用root,httpd会自动切换,查看进程:

[root@xxx bin]# ps -ef|grep httpd

root      29502     1  0 09:40 ?        00:00:00 ./httpd -k start

daemon   29503 29502  0 09:40 ?        00:00:00 ./httpd -k start

daemon   29504 29502  0 09:40 ?        00:00:00 ./httpd -k start

daemon   29505 29502  0 09:40 ?        00:00:00 ./httpd -k start

root      31623 30134  0 10:20 pts/0     00:00:00 grep httpd

六,配置反向代理转发所有请求到应用服务器

6.1 查看已经加载的proxy模块,默认是没有(视乎版本)


[root@xxx bin]# ./httpd -M|grep proxy

6.2 修改需要加载的proxy模块

打开/usr/local/apache2/conf/httpd.conf文件(/usr/local/apache2是httpd的安装目录),查找mod_proxy.so和mod_proxy_http.so,把开头的#去掉:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

另外还需要加载Virtial hosts的配置,查找httpd-vhosts.conf,把开头的#去掉:

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

* 启用Virtual hosts需要mod_log_config.so模块,它是默认加载的,确认开头是没有#:

LoadModule log_config_module modules/mod_log_config.so

重启

[root@xxx bin]# ./httpd -k restart

重新查看已经加载的proxy模块,这个时候应该出现如下所示的2个模块证明加载成功:

[root@xxx bin]# ./httpd -M|grep proxy

 proxy_module (shared)

 proxy_http_module (shared)

6.3 如果需要使用ssl,需要按照上述方法加载mod_ssl.so模块:

LoadModule ssl_module modules/mod_ssl.so

以及Secure (SSL/TLS) connections配置,把开头的#去掉:

# Secure (SSL/TLS) connections

Include conf/extra/httpd-ssl.conf

* 启用Secure (SSL/TLS) connections需要以下模块,确认开头的#已经去掉:

LoadModule log_config_module modules/mod_log_config.so

LoadModule setenvif_module modules/mod_setenvif.so

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

6.4 配置HTTP反向代理

打开/usr/local/apache2/conf/extra/httpd-vhosts.conf文件(/usr/local/apache2是httpd的安装目录),修改节点<VirtualHost *:80>:

<VirtualHost *:80>

    ServerAdmin xxx@xxx.com                              #管理员邮箱

    DocumentRoot "/usr/local/apache2/htdocs"  #应用文件根目录,在安装目录下面

    ServerName xxx.com                                         #监听的域名或者ip

    ErrorLog "logs/error.log"                                    #错误日志相对路径

    CustomLog "logs/access.log" common          #访问日志相对路径

    ProxyVia Off                                                         #用于控制在http首部是否使用Via,off

    ProxyRequests Off                                              #是否开启apache正向代理的功能,off

    ProxyPreserveHost On                                      #是否使用转发,On

    ProxyPass / http://ip:port/                                   #监听的路径和转发的路径,根据实际情况修改

    ProxyPassReverse / http://ip:port/                   #需要输入http://和最后面的/

</VirtualHost>

* 如果需要使用多个不同端口,可以配置多个<VirtualHost *:端口>节点

* 修改任何conf文件保存后都必须重启httpd

6.5 配置HTTPS反向代理

打开/usr/local/apache2/conf/extra/httpd-ssl.conf文件(/usr/local/apache2是httpd的安装目录),修改以下配置:

# 监听的HTTPS端口,默认是443

Listen 443

# Inter-Process Session Cache:

# Configure the SSL Session Cache: First the mechanism 

# to use and second the expiring timeout (in seconds).

SSLSessionCache        "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"

SSLSessionCacheTimeout  300

## SSL Virtual Host Context

<VirtualHost _default_:443>                              #端口需要和上面一致

  DocumentRoot "/usr/local/apache2/htdocs" #应用文件根目录,在安装目录下面

  ServerName www.xxx.com                             #监听的域名或者ip

  ServerAdmin xxx@xxx.com                             #管理员邮箱

  ErrorLog "/usr/local/apache2/logs/ssl_error.log"            #错误日志路径

  TransferLog "/usr/local/apache2/logs/ssl_access.log"  #访问日志路径

  SSLEngine on                                                                      #启用SSLEngine

  SSLProxyEngine on                                                            #启用SSLProxyEngine

  #如果使用RSA或DSA或ECC certificate的话也要一起列出

  SSLCertificateFile "/usr/local/apache2/conf/server.crt"     #Server Certificate证书路径

  SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"  #Server Private Key路径

  #下面是可选的,如果有的话,需要去掉前面的#

  #SSLCertificateChainFile "/usr/local/apache2/conf/server-ca.crt"  #Server Certificate Chain

  #SSLCACertificatePath "/usr/local/apache2/conf/ssl.crt"           #Certificate Authority (CA)

  #Certificate Revocation Lists (CRL)

  #SSLCARevocationPath "/usr/local/apache2/conf/ssl.crl"

  #SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle.crl"

  #SSLCARevocationCheck chain

  #Client Authentication (Type):

  #SSLVerifyClient require

  #SSLVerifyDepth  10

  #TLS-SRP mutual authentication

  #SSLSRPVerifierFile "/usr/local/apache2/conf/passwd.srpv"

  #定制化格式日志

  CustomLog "/usr/local/apache2/logs/ssl_request.log" \

          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

  #监听的路径和转发的路径,根据实际情况修改,需要输入https://和最后面的/

  ProxyRequests Off

  ProxyPass / https://ip:443/                

  ProxyPassReverse / https://ip:443/             

</VirtualHost>

* 上述证书文件必须复制到相应的路径

* 如果不想检查证书的话可以使用SSLProxyCheckPeerName off

* 修改任何conf文件保存后都必须重启httpd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息