我有一个nginxconfiguration,包括一个CSP头,为所有请求服务。 现在我需要重写它在一个特定的位置(这也恰好被重写)。 我在想这样的事情:
server { listen 80; listen [::]:80; server_name example.com; root /var/www; index index.php; try_files $uri @rewrites; add_header Content-Security-Policy "default-src 'self' ; script-src 'self' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src 'self' ; media-src * 'self' ; form-action 'self'"; location @rewrites { rewrite ^/special/([0-9]*) /special.php?id=$1 last; rewrite ^/foo/([az]+) /foo.php?method=$1 last; } location /special { add_header Content-Security-Policy "default-src 'self' ; script-src 'self' 'unsafe-inline' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src 'self' ; media-src * 'self' ; form-action 'self'"; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+?\.php)(/.*)$; include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php; } }
然而,虽然这在任何以/special开头的请求上设置标题,但是它会生成一个404,因为它不会继续到映射PHP文件的以下位置。 我应该怎么做?
试着看下面是否适合你:
http上下文:
map $request_uri $csp_header { default "default-src 'self' ; script-src 'self' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src 'self' ; media-src * 'self' ; form-action 'self'"; "~^/special" "default-src 'self' ; script-src 'self' 'unsafe-inline' ; style-src 'self' 'unsafe-inline' ; img-src * 'self' data: ; font-src 'self' ; media-src * 'self' ; form-action 'self'"; }
server环境:
add_header Content-Security-Policy $csp_header;