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

来源:互联网 发布:c语言判断水仙花数 编辑:程序博客网 时间:2024/05/22 06:56

一,依赖软件:


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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蚂蚁借呗还款后没显示还款怎么办 王者荣耀什么英雄都打的很烂怎么办 军校参加了政审体检误了怎么办 如果老板搬迁不给工人补偿怎么办 下面的毛很多又掉的厉害怎么办? 想去美国开饭店要怎么办签证 在沙漠中旅游如果车子坏了该怎么办 小磨床平面磨出来很粗怎么办 玩cs鼠标单点总是连点怎么办 论文出现计算上的错误该怎么办 不戴头盔违法扣分怎么办不了缴费 去法国会说英语不会说法语怎么办 企业有很多费用没有正式发票怎么办 我二张一万元的作废发票掉了怎么办 小规模上月开错税率的票怎么办 一般纳税人开票税率开错了怎么办 电信电子发票代表号码错了怎么办 发票备注栏项目名称写了两遍怎么办 苏州出入境手撕发票弄丢了怎么办 电脑下载过播放器还是不播放怎么办 局域网内的电脑无法互相访问怎么办 浏览器拖动滑动线页面会跳动怎么办 在暴风影音上视频播放不出来怎么办 格式工厂转换格式占内存太大怎么办 手机登陆不上路由器管理界面怎么办 新路由器设置密码后不能上网怎么办 更换网络后无线路由器不能用怎么办 手机登录不了路由器登录业面怎么办 海康威视通道用户被锁定怎么办 无线适配器或访问点有问题怎么办 客户买鞋子说价格贵该怎么办 小米5s刷成真砖后怎么办 手机电源键坏了开不了机怎么办 手机开关键坏了开不了机怎么办 vivo手机解屏密码忘了怎么办 小米max关机后开关键坏了怎么办 联想手机刷机失败无限重启怎么办 红米2a显示白屏怎么办 小米6手机一直处于开机状态怎么办 怎么在手机上看wifi密码怎么办 怎么查自己的宽带密码忘记了怎么办