How to proxy a web site by apache2 in Ubuntu
Install apache2
To execute the install command in terminal:
sudo apt-get install apache2
Then, we can find that the apache2 has been installed in "/etc/" directory.
eric@eric:cd /etc/apache2 eric@eric:/etc/apache2$ apache2 -version
Server version: Apache/2.4. (Ubuntu)
Server built: Apr :: eric@eric:/etc/apache2# ls -l
total
-rw-r--r-- root root Jan : apache2.conf
drwxr-xr-x root root Jun : conf-available
drwxr-xr-x root root Jun : conf-enabled
-rw-r--r-- root root Jan : envvars
-rw-r--r-- root root Jan : magic
drwxr-xr-x root root Jun : mods-available
drwxr-xr-x root root Jun : mods-enabled
-rw-r--r-- root root Jan : ports.conf
drwxr-xr-x root root Jun : sites-available
drwxr-xr-x root root Jun : sites-enabled
Attention:
After executing the install command, some echo exception messages may shown like that.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
()Address already in use: AH00072: make_sock: could not bind to address [::]:
()Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:
no listening sockets available, shutting down
If so, we need to:
1) Config the "ServerName" in apache2.conf.
eric@eric:cd /etc/apache2
eric@eric:cd vi apache2.conf ...
ServerName localhost
...
2) End the existed process which is using the 80 socket.
netstat -ap | grep
lsof -i:
kill {PID}
Or modify the listen socket. (See Config listening ports)
Then, we can restart apache2.
eric@eric:sudo /etc/init.d/apache2 restart
Config listening ports
We can change and add the listening ports by modifying port.conf file in "/etc/apache2/".
eric@eric:sudo vi /etc/apache2/ports.conf
For example, we change the default port from 80 to 81 to avoid the in used portd.
Listen <IfModule ssl_module>
Listen
</IfModule> <IfModule mod_gnutls.c>
Listen
</IfModule>
After changing the default port, the default site configuration (/etc/apache2/sites-enabled/000-default.conf) also need be updated.
eric@eric:sudo vi /etc/apache2/sites-enabled/-default.conf
Modify
<VirtualHost *:>
as
<VirtualHost *:>
Config proxy or reverse proxy
Here, there is a Tomcat worked in 8080 port as our J2EE server and an application named "jreport" running in it. We will config the apache to proxy it.
1. Activate proxy module
There are "mods-available" and "mods-enabled" two directories in apache. The "mods-available" directory includes all available module configuration files. If we want to make them take effect, they must be copied or linked into the "mods-enabled" directory.
For activating the proxy module, we create some soft link for "proxy.load", "proxy_http.load" and "proxy.conf".
eric@eric:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/proxy.load
eric@eric:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/proxy_http.load
eric@eric:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/proxy.conf
Then, execute the a2enmod command.
eric@eric:/etc/apache2$ a2enmod proxy
2. Config proxy
After activating the proxy module, we can config the "Forward Proxy" or "Reverse Proxy" for the "jreport" application in Tomcat.
- Reverse Proxy
Reverse proxy is the most used way.
ProxyRequests Off
ProxyPass /jreport ${JREPORT_SERVER}/jreport
ProxyPassReverse /jreport ${JREPORT_SERVER}/jreport
or
ProxyRequests Off Timeout
ProxyTimeout <Location /jreport/>
ProxyPass ${JREPORT_SERVER}/jreport
ProxyPassReverse ${JREPORT_SERVER}/jreport
ProxyPassReverseCookiePath /jreport /
</Location>
For easy to config, we define a variable named "JREPORT_SERVER" in "/etc/apache2/envvars".
export JREPORT_SERVER=http://192.168.0.88:8080
After restarting the apache with the latest configuration, we can access the "jreport" application with:
http://localhost:81/jreport
- Forward Proxy
For example, to control who can access your proxy:
ProxyRequests On
ProxyVia On
<Proxy *>
Require ip 192.168.
</Proxy>
For more details, please see the official doc about mod_proxy.
Add SSL Support
1. Install openssl and ssl_cert
eric@eric: sudo apt-get install openssl ssl_cert
2. Generate private key and certification
eric@eric: sudo mkdir /etc/apache2/ssl
eric@eric: cd /etc/apache2/ssl
eric@eric:/etc/apache2/ssl$ sudo openssl genrsa -des3 -out my-server.key
eric@eric:/etc/apache2/ssl$ sudo openssl req -key my-server.key -x509 -out my-server.crt -config /etc/ssl/openssl.cnf -days
3. Activate SSL module
eric@eric:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.load
eric@eric:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.conf
eric@eric:/etc/apache2/mods-enabled$ sudo a2enmod ssl
4. Add SSL support for site
Now, we modify the default site configuration (/etc/apache2/sites-enabled/000-default.conf) to add SSL support and make non-https access use the https automatically.
Usually, we config the 443 port for SSL support.
<VirtualHost *:>
... RewriteEngine on
RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$ [L,R]
</VirtualHost>
<VirtualHost *:>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/my-server.crt
SSLCertificateKeyFiel /etc/apache2/ssl/my-server.key ... </VirtualHost>
Postscript
I have just recorded my first attempt to proxy a web site by apache for memo. There are some other useful and complex modules in apache, such as rewrite, load balance and so on.
Reference
- Apache official doc: http://httpd.apache.org/docs/2.4/
How to proxy a web site by apache2 in Ubuntu的更多相关文章
- Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal
Drupal与大型网站架构(译)- Large-Scale Web Site Infrastructure and Drupal Linuxjournal 网站经典文章翻译,原文地址: Large-S ...
- Web site collections
Integration 伯乐在线 极客头条 Hacker News Stack Overflow RFC Search Security Python Hacker - Freebuf PrimalS ...
- Microsoft Azure Web Sites应用与实践【2】—— 通过本地IIS 远程管理Microsoft Azure Web Site
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
- Azure Web Site 之 利用Azure Web site 发布网站
由于经常混迹于MSDN Azure论坛,少不了和一些外国朋友打交道.有的时候觉得还是有一些东西可以写出来与外国友人们分享下的, 所以就用一个开源项目建了一个英文blog项目. 在发布的时候,首选的就是 ...
- Azure China (7) 使用WebMetrix将Web Site发布至Azure China
<Windows Azure Platform 系列文章目录> 本章介绍的是,使用世纪互联运维的Azure云服务. 1.首先我们登陆Azure管理界面.http://manage.wind ...
- Windows Azure Web Site (6) 使用FTP发布Azure Web Site
<Windows Azure Platform 系列文章目录> 笔者在之前的文章中介绍的都是使用IDE,也就是Visual Studio,将本地的aspx发布到Azure Web Site ...
- Windows Azure Web Site (7) Web Site配置
<Windows Azure Platform 系列文章目录> 在上一章内容中,我们已经部署了Azure WebSite.我们可以在Web Site配置页面进行配置.如下图: 另外,我们还 ...
- Windows Azure Web Site (8) 设置Web Site时区
<Windows Azure Platform 系列文章目录> 许多已经使用Azure Web Site的用户已经发现了,Azure Web Site默认的系统时间是UTC时区. 比如我们 ...
- Windows Azure Web Site (9) Web Site公网IP地址
<Windows Azure Platform 系列文章目录> 本文会同时介绍国内由世纪互联运维的Azure China和海外Azure Global. 熟悉Windows Azure平台 ...
随机推荐
- 一步一步学Silverlight 2系列(12):数据与通信之WebClient
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- Linux系统中的运行级别
什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别. 它让一些程序在一个级别启动,而另外一个级别的时候不启动. Linux系统的有效登录模式有0~9共十种,不过沿用UNIX系统的至多6 ...
- JRE System Library 与Java EE Libraries的区别
JRE System Library是只要做java开发都需要的完整的.标准的库. Java EE5 Libraries只是java三个方向中做java EE所需要的库.如果做Web方面的开发的话就 ...
- py-day15_css+js_初
css+js_初 一.鼠标移动变色 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- C++笔试题(十)
这些题目相比其他公司的试题,较为基础,全部为C语言,没有涉及C++,但如果不细心,是很难得到较高分数的.另外大家转贴不要去掉我的个人信息啊.互相宣传下网站嘛.1. 找错 void test1() { ...
- Codeforces 702B【二分】
题意: 给一个a数组,输出有多少对相加是等于2^x的.1<=a[i]<=1e9,n<=1e5 思路: a[i]+a[j]=2^x 对于每个a[i],枚举x,然后二分查找a[j]; p ...
- Codeforces702A - Maximum Increase【尺取】
题意: 求一个连续的最长子序列长度: 思路: 没看仔细还wa1了-以为LIS- 然后写了尺取吧...= =太不仔细了.不过收获是LIS特么写挫了然后看了学长的blog<-点我- 题目的挫code ...
- PTA 计算平均值
现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行输入一组数据(至少有一组数据), ...
- 如何使用webstorm去操作git
0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...
- 两年Java程序员面试经验分享,从简历制作到面试总结!
前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...