尝试将Nginx用作反向代理

首先

通过参考以下文章并尝试后得出的实验结果备忘录:
https://qiita.com/OPySPGcLYpJE0Tc/items/1f4219a51980a75696b5

搭建反向代理服务器

准备 CentOS 7 的 Docker 容器

$ docker run -it -d --privileged --name nginx_reverse_proxy centos:centos7 /sbin/init

将nginx安装到容器中

登录容器

$ docker exec -it nginx_reverse_proxy /bin/bash

安装Nginx

# vi /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1

# yum -y install nginx

启动nginx

# systemctl start nginx

# systemctl status nginx
    ● nginx.service - nginx - high performance web server
    Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
    Active: active (running) since Wed 2021-05-12 14:33:11 UTC; 7s ago
        Docs: http://nginx.org/en/docs/
    Process: 168 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
    Main PID: 169 (nginx)
    CGroup: /docker/ef5c700de13cd3382f585be627278ab4d2bf5263b9867a2d9a3d5e431247512b/system.slice/nginx.service
            ├─169 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx...
            ├─170 nginx: worker process
            └─171 nginx: worker process
            ‣ 169 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx...

    May 12 14:33:11 ef5c700de13c systemd[1]: Starting nginx - high performanc....
    May 12 14:33:11 ef5c700de13c systemd[1]: Started nginx - high performance....
    Hint: Some lines were ellipsized, use -l to show in full.

# curl localhost:80
// nginxのデフォルトのhtmlテンプレートが表示される。省略。

将nginx配置为反向代理

请按以下方式添加作为反向代理的设置文件。
*请注意,前三行中启用了缓存功能。

# hostname -i
    172.17.0.2

# vi /etc/nginx/conf.d/backend.conf
    proxy_cache_path /var/cache/nginx/rproxy keys_zone=zone1:1m max_size=1g inactive=24h;
    proxy_temp_path /var/cache/nginx_tmp;
    proxy_ignore_headers Cache-Control;

    server {
        listen 80;
        server_name 172.17.0.2;
        location / {
            proxy_pass http://172.17.0.3:8080;
            proxy_cache zone1;
            proxy_cache_valid 200 302 600s;
            add_header X-Nginx-Cache $upstream_cache_status;
        }
    }

重新启动Nginx

# systemctl restart nginx

建立网络服务器

准备CentOS 7的Docker容器

$ docker run -it -d --privileged --name httpd_server centos:centos7 /sbin/init

在容器中安装HTTPD

使用docker登录容器

$ docker exec -it httpd_server /bin/bash

安装httpd

# yum -y install httpd

将httpd配置为Web服务器。

将端口设置为8080号。(为了使反向代理nginx容器能够访问)

# vi /etc/httpd/conf/httpd.conf
    Listen 8080

启动httpd

# systemctl start httpd

# systemctl status httpd

用lsof命令进行确认。

# yum -y install lsof

# lsof -i:8080
    COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    httpd   171   root    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)
    httpd   172 apache    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)
    httpd   173 apache    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)
    httpd   174 apache    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)
    httpd   175 apache    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)
    httpd   176 apache    3u  IPv4 697190      0t0  TCP *:webcache (LISTEN)

将网页放置

# echo "hoge" > /var/www/html/index.html

# curl localhost:8080
    hoge

验证行动

查询现金余额

在访问反向代理前,请查看nginx配置文件中设置的缓存目标文件。
为空。

# ls /var/cache/nginx/rproxy/

访问反向代理

尝试访问反向代理。

# curl 172.17.0.2:80
    hoge

请确认现金。

# ls /var/cache/nginx/rproxy/
    bea87927112d3594daed0e660e1256e4
# cat /var/cache/nginx/rproxy/bea87927112d3594daed0e660e1256e4
    m�`~�`�`pA)np"5-5c223261fc200"
    KEY: http://172.17.0.3:8080/
    HTTP/1.1 200 OK
    Date: Wed, 12 May 2021 14:54:13 GMT
    Server: Apache/2.4.6 (CentOS)
    Last-Modified: Wed, 12 May 2021 14:51:42 GMT
    ETag: "5-5c223261fc200"
    Accept-Ranges: bytes
    Content-Length: 5
    Connection: close
    Content-Type: text/html; charset=UTF-8

    hoge

确认访问日志

在中国我们可以这样表达:
查看Web服务器端(已安装httpd)的日志。
有两种日志可供查看,一是通过localhost访问的日志,二是通过反向代理访问的日志。

# tail -f /var/log/httpd/access_log
    127.0.0.1 - - [12/May/2021:14:52:17 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0"
    172.17.0.2 - - [12/May/2021:14:54:13 +0000] "GET / HTTP/1.0" 200 5 "-" "curl/7.29.0"

确认是否使用了缓存。

在执行上述的tail命令的状态下,尝试以以下方式多次访问反向代理。

# curl 172.17.0.2:80
    hoge

# curl 172.17.0.2:80
    hoge

即使按照上述方式访问,tail命令没有任何反应。
也就是说,没有访问到web服务器。
换句话说,可能是使用了缓存。

为了确认,查看反向代理(nginx)的日志。

由于有以下四个日志,可以确定已访问到反向代理。

# cat /var/log/nginx/access.log 
127.0.0.1 - - [12/May/2021:14:35:54 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.17.0.2 - - [12/May/2021:14:54:13 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"
172.17.0.2 - - [12/May/2021:15:00:57 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"
172.17.0.2 - - [12/May/2021:15:00:58 +0000] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0" "-"

从上面来看,对于第二次和第三次对反向代理的访问,虽然已经到达了反向代理,但由于没有访问到Web服务器,所以应该使用了反向代理内部的缓存。

广告
将在 10 秒后关闭
bannerAds