Linux学习-Nginx之http_proxy_module

Posted 丢爸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-Nginx之http_proxy_module相关的知识,希望对你有一定的参考价值。

http_proxy_module

proxy_pass
#将请求转发至本机的8000端口,并设置http请求头的Host和X-Real-IP
location / 
    proxy_pass       http://localhost:8000;
    #设置请求头,$host,$remote_addr--变量
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;

#当客户机访问http://192.168.88.101/bbs/时会将请求代理至后端http://192.168.88.102/bbs/地址
 location /bbs/ 
            proxy_pass  http://192.168.88.102/bbs/;
        
#当客户机访问http://192.168.88.101/forum/时会将请求代理至后端http://192.168.88.102/bbs/地址
location /forum/ 
            proxy_pass  http://192.168.88.102/bbs/;
        
#当客户机访问http://192.168.88.101/a.txt时将请求代理至后端http://192.168.88.102/a.txt
location ~* \\.txt$ 
			#注:location模式匹配中使用了正则,则下面http://192.168.88.102后不能再加任何信息,否则会视为语法错误,模式中使用了什么会自动添加至http://192.168.88.102后进行响应
           proxy_pass http://192.168.88.102;
        
#当客户机访问http://192.168.88.101/bbs/时将请求代理至http://192.168.88.102/bbs/
location /bbs 
            proxy_pass  http://192.168.88.102;
            
#当客户机访问http://192.168.88.101/bbs/时将请求代理至http://192.168.88.102/
location /bbs 
            proxy_pass  http://192.168.88.102/;
            

#将请求代理至192.168.88.102
location / 
            proxy_pass  http://192.168.88.102;
        
#查看102服务器nginx访问日志,记录通过101的主机访问记录
192.168.88.101 - - [07/May/2022:22:40:22 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/99.0.4844.84 Safari/537.36 OPR/85.0.4341.75 (Edition B2)"
192.168.88.101 - - [07/May/2022:22:40:22 +0000] "GET /favicon.ico HTTP/1.0" 404 555 "http://192.168.88.101/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36 OPR/85.0.4341.75 (Edition B2)"
#修改代理服务器的配置信息
location / 
            proxy_pass  http://192.168.88.102;
            #root   html;
            #index  index.html index.htm;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;

        
#修改后端主机的记录日志格式(注:记录日志时代理服务器使用X-Real-IP,后端服务器需要使用http_x_real_ip来获取值)
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      '"$host" "$http_x_real_ip"';
access_log  logs/access.log  main;
Nginx缓存

Nginx缓存的键(key)是存储在内存中,值(value)存储在磁盘中

#proxy_cache_path:设置缓存存储目录,levels中1表示1级子目录使用1个字符,:2表示二级子目录使用两个字符
#key_zone : 设置共享内存区,在共享内存中设置一块存储区域来存放缓存的key字符串,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
#max_size:定义缓存的上限,如果不指定,允许缓存不断增长,占用所有磁盘空间,当缓存达到设定的值,处理器便调用cache manager来移除最近最少使用的文件
#inactive指定了项目在不被访问的情况下能够在内存中保持的时长
#proxy_cache_path只能定义到http上下文中
proxy_cache_path /tmp/nginx/cache levels=1:2 inactive=60s keys_zone=mycache:10m max_size=10g;
#proxy_cache_methods GET | HEAD | POST ...----定义用户在使用相应方法请求时才进行缓存,默认GET HEAD
#proxy_cache_min_uses number;        请求被请求number次被缓存,默认为1
#proxy_cache_purge string ...
#proxy_cache_revalidate on | off; ---过期后重新校验
#proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;----陈旧总比没有好,当无法从原始服务器获取最新的内容数据时,Nginx可以分发缓存中的陈旧内容,这种情况一般发生在关联缓存内容的原始服务器宕机或者繁忙时,比起对客户端传达错误信息,nginx可以发送在其内存中的陈旧文件
#proxy_cache_valid [code ...] time;按时间定义不同响应码的缓存时长
#proxy_connect_timeout time;定义连接后端服务器的连接时长
#proxy_hide_header:隐藏由proxy响应至客户端时的报文首部

#在proxy服务器http上下文中添加以下行,配置缓存
proxy_cache_path /tmp/nginx/cache levels=1:2 inactive=60s keys_zone=mycache:10m max_size=10g;
#在server上下文中添加以下信息,开启缓存
location /bbs 
            proxy_cache mycache;
            proxy_cache_valid 200 1d;
            proxy_cache_valid 301 302 10m;
            proxy_cache_valid any 1m;
            proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_404;
            proxy_pass  http://192.168.88.102/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        
#查看生成的缓存内容信息
[root@ds 20]# pwd
/tmp/nginx/cache/1/20
[root@ds 20]# ls
226fc74dfed270acecd54c0f0ecf0201

以上是关于Linux学习-Nginx之http_proxy_module的主要内容,如果未能解决你的问题,请参考以下文章

学习Linux须知1.2之Linux命令的实战

Linux学习总结(四十)lnmp之nginx安装 用户认证 域名重定向

Nginx 小入门记录 之 初识Nginx和环境准备

nginx学习1:Linux安装nginx

Linux学习-Nginx之http_proxy_module

SaltStack学习系列之Nginx部署