nginx配置反向代理

Posted by kevin on April 5, 2020

preface

之前的文章中已经介绍了 Linux 环境下配置 LNMP,可以自己搭建网站了。鸽了很久的 nginx 反向代理教程到现在才写,因为配置在虚拟机里,最近才有空去打开哈哈哈。nginx 反向代理目前我用的最多的情况就是隐藏端口号,我的一台机器上可能同时运行着很多个 web 服务,但是 80 端口只有一个,就不能将所有的服务全都绑定到 80 端口,这样的话就很麻烦,一个是要记住服务器的 ip,一个是要记住每一个服务的端口号,以ip:port 的形式在浏览器访问。但是有了 nginx 的话,再也不用这么麻烦了,只需要购买一个域名就行了。

怎么搞

比如现在我的服务器上用 python 开了一个简单的 HTTPServer,默认是在 8000 端口,要访问的话就得在浏览器输入以下地址:

192.168.120.128:8000

python-server

现在我在 nginx 的 /etc/nginx/sites-enabled 目录下新增加一个 conf 配置文件,叫做 py.conf,写下以下内容,并且在域名提供商处新增加一个二级域名指向当前服务器 ip 地址。

server{
        listen 80;
        server_name server.szukevin.site;
        location / {
                proxy_pass http://127.0.0.1:8000/;
        }
}

这个其实挺好理解的,觉得陌生的话可以看看我之前写的关于 nginx 的文章,也就是说,server.szukevin.site 这个域名监听着服务器上的 80 端口,如果访问了 / 根目录的话,就将请求转发到本地的 8000 端口,这也就实现了反向代理的功能,即外界并不知道服务器真实的端口是哪一个,只需输入域名就可以访问到服务器

reverse-proxy

其他例子

再来举一个 php 网站的例子,同样在 /etc/nginx/sites-enabled 目录下新增加一个 conf 配置文件,叫做 sql-lab.conf,写入以下内容,其实第二个 server 就是之前我们第一次配置这个网站的时候添加的内容,也就是已经配置号了一个动态网站,在 8889 端口上运行。然后上面一个 server 用一个域名绑定了 80 端口,如果输入域名的话就将请求转发到 8889 端口上,达到了访问网站的目的。

server{
        listen 80;
        server_name sqli.szukevin.site;
        location / {
                proxy_pass http://127.0.0.1:8889/;
        }
}
server {
        listen 8889;
        listen [::]:8889;

        server_name localhost;

        root /var/www/sqli-labs-php7;
        index index.html index.php;

        location ~ [^/]\.php(/|$)
        {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
}

当然,这还是比较基础 nginx 知识,其实 nginx 能做的东西可多了,我也只选择了我日常需要用到的一些东西来学习,就拿反向代理来说,首先得学会反向代理的原理,然后最重要的,拥有一个自己的域名!