最近发现自己服务器总是莫名奇妙的被攻击,就想着干脆配置一个前置的反向代理服务器吧,后端才用apache,前端反向代理采用nginx
为什么才用Nginx作为前端
- Nginx是一款高性能的Http和反向代理服务器
- Nginx的配置简单易懂
什么是反向代理
反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部(或其他)网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。
操作方法
比如我想在前端使用www.aibofan.com的域名来反向代理访问www.baidu.com,首先需要先将www.aibofan.com添加一个A记录指向反向代理服务器,然后再到反向代理服务器上修改Nginx的配置文件如下,添加下面的配置(按需修改):
server{
listen 80;
server_name www.aibofan.com;
location / {
proxy_pass http://www.baidu.com/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
添加好后,先校验nginx的配置是否正常可用
yum安装的nginx可以直接执行
nginx -t
源码安装的nginx可以执行
/usr/local/nginx/sbin/nginx -t
如果出现下的情况表示正常
yum安装 the configuration file /etc/nginx/nginx.conf syntax is ok configuration file /etc/nginx/nginx.conf test is successful
源码安装 the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful
这样只是简单的反向代理,如果nginx上已经安装 –with-http_sub_module 模块,可以在location / { 中添加上 sub_filter 替换内容 ‘替换后内容’; 进行简单的内容替换,默认只替换html内容(如更改html源码里面的网址、文章等信息),其他文件类型,需要添加 sub_filter_types 参数指定更多类型,多次替换还需要加上sub_filter_once off; 。
如果网站较大可能会有很多其他的资源需要替代,需要在nginx上添加第三方模块ngx_http_substitutions_filter_module来实现更多功能。
再执行 /usr/local/nginx/sbin/nginx -s reload 使配置生效,域名解析生效后就可以通过www.aibofan.com 访问www.baidu.com了。
更新———————
最近在使用小鸟云的服务器做前端代理,误打误撞的想试试FreeBSD 10.3 amd64,然后百度了一下如何安装软件,发现安装命令是pkg install nginx,安装的版本是nginx 1.12.2(20180508),然后安装好以后网站的速度要比以前用centos 7 + nginx 1.13快非常多,快到不科学,但没细致的研究过,毕竟就换了个系统(Linux->Unix)换了一个Web软件,连配置都没变过,就直接复制过去的,第二天安装好以后想的反正都重新安装了就试试ngx_http_sub_module 这个模块的功能吧,先在百度上搜索了一圈,发现要编译安装,不开心,然后用nginx -V看了一下编译参数,不看不得了,原理这货已经带了这个模块,我不需要再去折腾其他东西了,直接就加上去,用用看
sub_filter 'http://www.eample.com/' 'http://$host/'; #替换地址需要替换多处,多写几行
sub_fliter sub_filter_once off; #如果开启只替换一次,关闭替换多次
#sub_filter_types text/html; #替换的文件类型,text/html是默认类型,不需要再另外添加一个
这个配置我在了location /{}里面如果要替换其他地址也可以复制到那个里面去。
20180720更新———————
可以在本地设置host,指向源站,这样就可以不使用替换功能了
server
{
listen 80;
server_name baidu.com;
location / {
proxy_pass http://source.baidu.com:8080/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
sub_filter 'http://source.baidu.com:8080/' 'http://$host/';
#sub_filter_once off;#字符串替换一次还是多次替换,默认替换一次,off:多次替换
#sub_filter_types text/html;#指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的
}
}