96

最近、Apache2からNginxに切り替えることにしました。CentOSサーバーにNginxをインストールし、基本構成をセットアップしました。ブラウザ(FF / Chrome)でサイトを読み込もうとしたところ、cssファイルが読み込まれていないことに気づきました。エラーコンソールを確認したところ、次のメッセージが表示されました。

Error: The stylesheet http://example.com/style.css was not loaded because its MIME type, "text/html", is not "text/css".

Nginxの構成を確認しましたが、すべて問題ないようです。

http {
    include /etc/nginx/mime.types;
    ..........
}

cssファイルのmimeタイプは、/ etc / nginx/mime.typesで正しく設定されています。

text/css css;

すべてが適切に構成されているようですが、cssファイルがまだロードされていません。説明はありません。

言及する価値のあるもう一つのこと。最初にepelリポジトリを使用してNginxをインストールし、古いバージョン:0.8を入手しました...問題はそのバージョンのバグであるように思われたので、0.8バージョンをアンインストールし、nginxリポジトリをyumに追加してから、最新バージョン:1.0をインストールしました。 14.14。新しいバージョンで問題が解決すると思いましたが、残念ながら解決しなかったので、アイデアが足りなくなりました。

助けていただければ幸いです。

構成ファイル:

/etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
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 "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
         root    /usr/share/nginx/html;
         index  index.html index.htm index.php;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
         include        fastcgi_params;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

/etc/nginx/mime.types

types {
    text/html                             html htm shtml;
    text/css                              css;
    text/xml                              xml;
    image/gif                             gif;
    image/jpeg                            jpeg jpg;
    application/x-javascript              js;
    application/atom+xml                  atom;
    application/rss+xml                   rss;
    ..........................................
    other types here
    ..........................................
}
4

15 に答える 15

114

Putting the include /etc/nginx/mime.types; under location / { instead of under http { solved the issue for me.

于 2012-08-09T01:11:03.133 に答える
42

Webで回避策を見つけました。/etc/nginx/conf.d/default.conf に以下を追加しました:

location ~ \.css {
    add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}

問題は、ルートが正しく設定されていないかのように、css ファイルへの要求がうまくリダイレ​​クトされないことです。error.log に表示されます

2012/04/11 14:01:23 [エラー] 7260#0: *2 open() "/etc/nginx//html/style.css"

そこで、2 つ目の回避策として、定義された各場所にルートを追加しました。今は動作しますが、少し冗長なようです。root は / location から継承されていませんか?

于 2012-04-11T18:14:55.677 に答える
25

style.css「location /」ディレクティブにより、実際には fastcgi を介して処理されています。したがって、ファイルを提供しているのは fastcgi であり ( nginx > fastcgi > filesystem)、ファイルシステムを直接提供している ( ) わけではありませんnginx > filesystem

私がまだ理解していない理由で (どこかにディレクティブがあると確信しています)、NGINX はtext/html、バックエンド アプリケーションが明示的に別段の指示をしない限り、fastcgi から提供されるすべてのものに MIME タイプを適用します。

犯人は、具体的には次の構成ブロックです。

location / {
     root    /usr/share/nginx/html;
     index  index.html index.htm index.php;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
     include        fastcgi_params;
}

そのはず:

location ~ \.php$ { # this line
     root    /usr/share/nginx/html;
     index  index.html index.htm index.php;
     fastcgi_split_path_info ^(.+\.php)(/.+)$; #this line
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # update this too
     include        fastcgi_params;
}

この変更により、*.phpファイルのみが fastcgi から要求されるようになります。この時点で、NGINX は正しい MIME タイプを適用します。URL の書き換えが発生している場合は、ロケーション ディレクティブ ( ) のlocation ~\.php$にこれを処理して、正しい拡張子が取得され、fastcgi に適切にルーティングされるようにする必要があります。

を使用した追加のセキュリティに関する考慮事項については、この記事をtry_files必ず確認してください。セキュリティへの影響を考えると、これは機能であり、バグではないと考えています。

于 2014-04-25T00:26:28.200 に答える
3
  1. nginx.conf ファイルで、次のように mime.types を body に追加しますhttp

    http {
        include /etc/nginx/mime.types;
        include /etc/nginx/conf.d/*.conf;
    }
    
  2. ターミナルに移動し、次を実行してサーバーをリロードします。

    sudo nginx -s reload
    
  3. Web ブラウザを開き、ハード リロードを実行します。リロード ボタンを右クリックし、ハード リロードを選択します。Chrome でできることCtrl+ Shift+R

于 2019-10-24T08:27:18.790 に答える
0

私は実際にこのページの上記のすべての回答に時間を費やしましたが、役に立ちませんでした. 次のコマンドを使用して、ディレクトリとサブディレクトリの所有者と権限をたまたま変更しました。次のコマンドを使用して、Web プロジェクト ディレクトリの所有者を/usr/share/nginx/htmlユーザーrootに変更しました。

chown root /usr/share/nginx/html/mywebprojectdir/*

そして最後に、次を使用してそのディレクトリとサブディレクトリのアクセス許可を変更しました。

chmod 755 /usr/share/nginx/html/mywebprojectdir/*

: 拒否された場合は、sudoを使用できます

于 2018-03-18T13:39:32.733 に答える