我在谷歌上搜索并询问了许多其他问题,但没有一个能帮助我解决我的问题。
因此,我想做的是从 s3 提供所有静态内容,并且唯一必须在 EC2 上使用 Apache 在服务器端运行的内容。
以下是我的 nginx 配置:
# WP Bullet nginx proxy cache
# Author Mike from https://guides.wp-bullet.com
#fix 504 gateway timeouts, can go in nginx.conf
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
#set the location of the cached files, zone, name, size (1000 MB) and how long to cache for 600 minutes
proxy_cache_path /var/run/proxy_cache levels=1:2 keys_zone=WORDPRESS-PROXY:10m max_size=1000m inactive=600m use_temp_path=off;
proxy_cache_key $scheme$host$request_uri;
#prevent header too large errors
proxy_buffers 256 16k;
proxy_buffer_size 32k;
#httpoxy exploit protection
proxy_set_header Proxy "";
# add forwarded for header
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server {
listen 80 default;
access_log /var/log/nginx/proxy-access.log;
error_log /var/log/nginx/proxy-error.log;
# show cache status and any skip cache reason
add_header X-Proxy-Cache $upstream_cache_status;
add_header Cache-BYPASS-Reason $skip_reason;
# define nginx variables
set $do_not_cache 0;
set $skip_reason "";
set $bypass 0;
# security for bypass so localhost can empty cache
if ($remote_addr ~ "^(127.0.0.1|Web.Server.IP)$") {
set $bypass $http_secret_header;
}
# skip caching WordPress cookies
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
set $skip_reason Cookie;
}
# Don't cache URIs containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {
set $skip_cache 1;
set $skip_reason URI;
}
location / {
proxy_set_header Host $host;
# may need to comment out proxy_redirect if get login redirect loop
proxy_redirect off;
proxy_cache WORDPRESS-PROXY;
proxy_cache_revalidate on;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_cache_bypass $bypass $do_not_cache;
proxy_no_cache $do_not_cache;
proxy_cache_valid 200 301 302 500m;
proxy_cache_valid 404 1m;
#can rename PURGE to whatever you want, should restrict it to backend server requests for security
proxy_cache_purge PURGE from 127.0.0.1 Web.Server.IP;
# pass requests onto your PHP backend
proxy_pass http://127.0.0.1:8080;
}
# allows purging via special URL
location ~ /purge(/.*) {
allow 127.0.0.1;
allow Web.Server.IP;
deny all;
proxy_cache_purge WORDPRESS-PROXY $scheme$host$1;
}
}
但我真的不知道如何识别以 .php 结尾的请求,以便代理到 EC2 上的 Apache,并将所有其他请求发送到 S3。但还有另一个问题,我有多个指向该服务器的域,以及 EC2 上的多个文件夹。
静态内容共享 S3 上的相同文件,但路径中包含 /upload/ 的请求除外。此请求被代理到 s3 上的另一个文件夹。
结构如下:
EC2 中的域/文件夹 site1.com / site1 site2.com.br / site2 site3.ar / site3
以 PHP 结尾:
Nginx > 向 EC2 发送请求。Apache 将处理响应该域的文件夹。
静态但路径没有 /uploads/
Nginx > 将请求发送到 S3 存储桶,存储到名为静止的,但保留了路径结构。
静态但有 /uploads/
Nginx > 向 S3 发送请求,但路径为 files/site1/file_name。(jpg/png/mp4/all others)。换句话说,不保留路径结构。
有人能帮我做这个吗?我是 nginx 新手,我不知道有什么方法可以做到这一点。