【发布时间】:2021-09-02 18:09:03
【问题描述】:
我试图通过缓存响应并避免我们从 API 端点获得的 429 响应来避免过于频繁地访问第三方 API。
为此,我设置了一个运行 Ubuntu 20.04 的 Linode 服务器。
配置文件etc/nginx/conf.d/nginx.conf如下
server {
server_name myserver-name-proxy.server.com;
access_log /var/log/access.log main;
error_log /var/log/error.log info;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache my_cache;
proxy_ignore_headers Cache-Control;
proxy_cache_methods GET HEAD POST;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass https://www.thirdpartyserver.com;
proxy_ssl_session_reuse on;
proxy_ssl_server_name on;
proxy_set_header X-Forwarded-Proto https;
proxy_buffering on;
proxy_cache_key $scheme$proxy_host$request_uri;
}
default_type application/json;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/myserver-name-proxy.server.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/myserver-name-proxy.server.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = myserver-name-proxy.server.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name myserver-name-proxy.server.com;
listen 80;
listen [::]:80;
return 404; # managed by Certbot
}
那么配置文件etc/nginx/conf.d/nginx.conf就是
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_time "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_cache_status" "$http_x_cache_status"';
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=24h use_temp_path=off;
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
没有错误,但是当我 tail 访问日志文件或检查标头时,只有 MISS 从 NGINX 返回为 $http_x_cache_status
到目前为止,我已尝试将 proxy_cache_path 更改为新文件夹。重新启动时,该文件夹由 NGINX 服务器创建,但没有写入任何内容,还有许多其他内容,例如关闭后台更新、缓存锁定等。
我可以看到这与所有教程之间的唯一区别是我将它与 SSL 一起使用并点击 https:// 端点并在设置中使用 proxy_ssl_session_reuse 和 proxy_ssl_server_name。
【问题讨论】:
标签: nginx caching reverse-proxy nginx-reverse-proxy