71

PHPとphp-fpmでnginxを実行しているubuntuサーバー上の仮想ホスト構成で使用するたびにadd_header、それが単に機能せず、何が間違っているのかわかりません。ここに私の設定ファイルがあります:

server {
    listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    root /var/www/example.com/webroot/;
    index index.html index.htm index.php;

    # Make site accessible from http://www.example.com/
    server_name www.example.com;

    # max request size
    client_max_body_size 20m;

    # enable gzip compression
    gzip             on;
    gzip_static      on;
    gzip_min_length  1000;
    gzip_proxied     expired no-cache no-store private auth;
    gzip_types       text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
    add_header PS 1

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to index.html
            try_files $uri $uri/ /index.php?$query_string;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }


    location ~* \.(css|js|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|$
            # 1 year -> 31536000
            expires 500s;
            access_log off;
            log_not_found off;
            add_header Pragma public;
            add_header Cache-Control "max-age=31536000, public";
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

            # With php5-cgi alone:
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/example.sock;
            fastcgi_index index.php?$query_string;
            include fastcgi_params;

            # instead I want to get the value from Origin request header
    }

    # Deny access to hidden files
    location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
    }

    error_page 403 /403/;
}

server {
    listen 80;
    server_name example.com;
    rewrite     ^ http://www.example.com$request_uri? permanent;
}

ヘッダーを他の場所セクションに追加しようとしましたが、結果は同じです。

どんな助けでも大歓迎です!!

4

8 に答える 8

30

add_header上記の設定を次のようにテストすると:

# nginx -t && service nginx reload

私は得る

nginx: [emerg] directive "add_header" is not terminated by ";" in
/etc/nginx/enabled-sites/example.com.conf:21

nginx: configuration file /etc/nginx/nginx.conf test failed

したがって、苦情は次の行を考慮しています。

add_header PS 1

セミコロン ( ;)がありません

使用したいヘッダーをテストするには

# curl -I http://example.com

ngx_http_headers_module マニュアルによると

syntax: add_header name value;
default:     —
context:    http, server, location, if in location

さらに試してみました

add_header X-test-A 1;
add_header "X-test-B" "2";
add_header 'X-test-C' '3';

httpserverおよびのコンテキストでは、コンテキストでlocationのみ表示されましたserver

于 2013-09-29T20:48:21.083 に答える
1

明らかに、add_header 継承の癖/落とし穴は上流層にも適用されます。

別のサービス向けのリクエストを事前承認するスクリプトがあったため、他のサービスからすべてのヘッダーを返していました。

これらのリレーされたヘッダーとともに「Access-Control-Allow-Origin」エントリの追加を開始すると、ブラウザは実際にエントリを取得してリクエストを許可します。

于 2017-01-06T19:29:02.053 に答える
0

==> nginx -s reload をリロードしても正しく動作しないと思います

add_header を使用してからリロードしても、応答は何も変わりませんでした。しかし、意図的なエラーを作成してクライアント側で 404 エラーを確認し、意図的なエラーを修正して再度リロードすると、Add_header が機能しました。

于 2020-04-04T18:50:59.607 に答える
-3

nginx を最新バージョンに更新しようとしたことが原因であることが判明しました。以前に再インストールを試みたところ、正しく再インストールされたように見えましたが、実際にはUbuntuはnginxを適切に削除していませんでした。したがって、Ubuntuサーバーを再インストールし、標準のubuntuリポジトリのみを使用してすべてを新たにインストールするだけで済みました。

于 2013-10-03T09:05:02.960 に答える