如何通过nginx反向代理

    本文的主要目的是:如何通过nginx反向代理监听4000端口,使直接访问网站而非端口。比如hexo,通过hexo server来启动服务后,是通过http://127.0.0.1:4000来监听实现的,这是不能直接绑定域名的主机空间的,现在我需要直接访问我的域名就可以访问改博客。此时就可以用到nginx反向代理。

    反向绑定域名也叫做反向D理,是指用D理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时D理服务器对外就表现为一个服务器。

    什么时候要用到反向绑定域名呢?反向绑定可以分流请求和负载均衡,因此它广泛用于一些大流量的网站和数据集群,降低系统负载。对于一些不能直接绑定域名的主机空间,我们可以用反向绑定域名的方法来强制绑定自己的域名。


    安装nginx(下面的步骤可快速在centos上安装nginx)

    安装epel仓库(install the epel repo)
    1
    sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
    安装remi仓库(Install the remi repo)
    1
    sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
    安装nginx和响应的依赖(Install nginx and dependencies)
    1
    sudo yum install nginx
    启动nginx服务器(Start the nginx HTTP server)
    1
    sudo /etc/init.d/nginx start

    此时启动后,可能会报以下错误:
    报错1

    通过netstat -ntpl可以查看端口占用情况
    端口检查

    中间我查了一些资料,解决办法是找到nginx目录中default.d文件(/etc/nginx/conf.d/default.d),然后修改里面的内容(vi default.d)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    server {
    listen 80;
    server_name cailidan.cn,www.cailidan.cn;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
    proxy_pass http://127.0.0.1:4000/;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    error_page 404 /404.html;
    location = /404.html {
    root /usr/share/nginx/html;
    }
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/share/nginx/html;
    }

    最后再重新启动sudo /etc/init.d/nginx start即可访问nginx。此时本需要ip:port才能访问的,就变成了ip就可以直接使用,相当于通过代理,重新处理了url.


    Nginx简介:

    Nginx是一个高性能的HTTP服务器和反向代理服务器, 最大的优点是节省资源,适用于处理高并发的请求。

    1. Nginx最初是按照反向代理设计的,和Apache不同, nginx关心如何处理url,而不是文件!

    2. Apache 是个基于进程处理的web服务器,如果同时有多个请求,必须要启动多个进程来处理。 这样在高负载的情况下,资源的消耗和响应的速度都会有很大的问题。 而Nginx是个基于事件(event)的异步处理模式

    3. 但是Nginx也有劣势,虽然在静态的反向方面Nginx表现优秀,但是在处理PHP动态请求方面不如Apache,并且在操作使用方面不如Apache方便,例如Wordpress一些插件就只能在Apache上起作用。Nginx一个最常见的问题出现访问502错误。

    既使用Nginx,又使用Apache

    Apache是因为其功能强大而出名的,而Nginx是因为其响应速度快而著称的。这就意味着Nginx在静态内容的服务上要相对快些,不过,Apache可以使用模块来运行后台应用服务器,而且还可以运行脚本语言。

    Apache和Nginx都可以用作代理服务器,不过通常我们会把Nginx用作代理服务器,而把Apache用作后台服务器。Nginx包含了 先进的负载均衡和内容缓冲功能。当然,Apache服务器的部署数量巨大。为了充分发挥Apache服务器的效能,就需要有负载均衡器。Apache可以使用自身所包含负载均衡模块,另外,还可以使用基于硬件的负载均衡器。

    另一种使用方法是给Nginx配置独立的 php-fpm应用,我们认为 php-fpm是一个应用,这是因为它不是执行期间可以装载的.dll或者.so,而是与Apache的模块使用方法相同。Ngnix使用php-fpm(FastCGI进程管理器)来处理php脚本,这就使得Nginx具有生成非静态内容的功能。


    我尚未解决的问题

    心痛,因为以前没有用过nginx,以前也只是听说过,这次也不是专门想学这个,只是想把网站不要通过端口访问,查到可以用nginx比较方便才去简单的了解了一下。但是发现虽然我想要的效果达到了,以前的apach和现在的nginx却有点冲突了。查到可以通过nginx来处理前端的资源,同时可以用apache做后台服务器处理后台php文件。这样可以充分利用两个的优点。但是必须通过更改nginx的配置才可以。相当于由原来的LAMP到了LNAMP。待我弄清楚了这个到底怎么配置,回头再来写一篇记录下来。