Linux VPS上配置Nginx反向代理

最近发现自己服务器总是莫名奇妙的被攻击,就想着干脆配置一个前置的反向代理服务器吧,后端才用apache,前端反向代理采用nginx

为什么才用Nginx作为前端

  1. Nginx是一款高性能的Http和反向代理服务器
  2. 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”,如果制定为*,那么所有的
    }
}
暂无评论

发送评论 编辑评论


上一篇
下一篇