タグ: nginx

nginxのPHPのアップロードファイルサイズの変更方法。

nginxのPHPのアップロードファイルサイズの変更方法。

WordPressで画像をアップした所画像がアップできませんでした。
結果を3行でいうと以下で解決。

  • nginxのclient_max_body_sizeを上げる。
  • php.iniで、upload_max_filesizeを上げる
  • php-fpmのrestartとnginxのreload

以下いくつか段階があったようなのでその解決方法の詳細

1、httpエラーがでる。

この場合はnginxが送信できるhttpのbodyサイズが不足していました。
私の環境の場合は、以下の設定ファイルを書き換えてnginxをreloadして解決しました。

ファイル : /etc/nginx/nginx.conf (共通の設定ファイルの最後当たりに追加)

http {
    (中略)
    client_max_body_size 50M;
    include /etc/nginx/conf.d/*.conf;
}

(ドメインごとの設定ファイルなどで変更ができるように includeの前にいれました。)

2、PHPのファイルアップロード制限

しばらく大丈夫だったのですが、今度はWordPressでアップロードした場合に上限だとエラーメッセージがでました。

6000x4028-17M.jpg exceeds the maximum upload size for this site.

これはPHPの設定 ‘upload_max_filesize’ が原因でした。
まずサーバーで値を確認。

# php --info | less
//'upload_max_filesize'を検索。
upload_max_filesize => 2M => 2M
//と2MBにっているさらに'php.ini'で検索してphp.iniの場所を確認。
 Loaded Configuration File => /etc/php.ini

/etc/php.iniを編集します。

# vim /etc/php.ini
//以下の部分を元の 2Mから10Mへ変
upload_max_filesize = 10M
//保存して10Mになっていることを確認
# php --info
upload_max_filesize => 10M => 10M

そしてnginx再起動

# systemctl restart nginx

でアップロードすると、あれできない。。と少し悩む。
あーphp-fpmもかと。

# systemctl restart php-fpm.service

として解決

nginx関係のメモ

nginx関係のメモ

主なディレクトリ構成

Directory note
/etc/logrotate.d ログローテーション設定ファイル
/etc/nginx/~ 設定ファイル関連
/usr/lib/systemd/system/nginx.service 起動スクリプト(systemdの設定ファイル)
/usr/lib64/nginx/modules/~ モジュール置き場
/usr/share/nginx/html/ ドキュメントルート
/var/cache/nginx/~ キャッシュファイルが置かれる
/var/log/nginx/~ ログファイル

設定ファイル

  • nginx.conf : 最初に読み込みまれる、以下の記述が有り別のファイルを読み込んでいる。
  • mime.types : フィアルタイプのマッピング
  • conf.d/default.conf : 基本的なWebサーバーの設定
  • scgi_params,uwsgi_params : CGI/WSGIのパラメータとnginxの変数のマッピング
  • win-utf,koi-utf,koi-win : ロシア語の文字コード関連ファイル普段使わない

設定ファイルのチェック

sudo nginx -t

状態確認、起動、終了、再起動、再読込+バイナリ入れ替え

$ sudo systemctl status nginx
$ sudo systemctl status nginx  //状態表示+ログ
$ sudo systemctl start nginx
$ sudo systemctl stop nginx
$ sudo systemctl restart nginx
$ sudo systemctl reload nginx

バイナリ入れ替えは新しいものが起動した後で、元を順次終了するのでサービスをストップせずに行える

$ sudo /sbin/service nginx upgrade

nginxコマンド

Command Note
nginx -h ヘルプ
nginx -v バージョン
nginx -t 設定ファイルのテスト
nginx -T 設定ファイルのテスト+表示
nginx -V バージョン情報+コンパイルフラグなど、組込モジュールの確認
nginx -s stop デーモンの停止強制
nginx -s quit 処理中のリクエストを待って停止
nginx -s reopen ログファイルを開き直す
nginx -s reload 実行中に設定ファイルを再読込

設定ファイルで使える変数

var value
$request_method GET
$host,$http_host www.example.com
$uri,$document_uri /path/to/file
$request_uri /path/to/file?a=1
$http_user_agent ユーザーエージェント
$http_cookie クッキー
$server_protocol HTTP/1.1
$query_string,$args 引数部分
$arg_{name},$cookie_{name},$http_{name} 引数、クッキー、HTTPヘッダー

nginxでBasic認証の設定方法

nginxでBasic認証の設定方法

Apacheのhtpasswdはインストールせずにopensslでパスワードファイル作成する方法です。

ユーザーファイルの作成とパーミッション設定

$ sudo echo "ユーザ名:$(openssl passwd -apr1 パスワード)" > /usr/share/nginx/html/user_passwords
$ sudo chmod 400 /usr/share/nginx/html/user_passwords
$ sudo chown nginx /usr/share/nginx/html/user_passwords

ここでは、nginx(Nginxの実行しているシステムユーザー)のみのパーミッションに設定しています。
また簡易なプレビューサイトを想定して、ドキュメントルート以下においてますが、
実際の運用では適時DocumentRootより上位ディレクトリなどへの配置に変更ください。
(まぁ運用の場合、そもそもBasicな認証で良いのかというのは、)

Nginxのコンフィグファイルの設定

server {
    listen       80;
    server_name  example.com;
    root   /usr/share/nginx/html/example.com;
    index  index.php index.html;
    auth_basic "preview site";
    auth_basic_user_file /usr/share/nginx/html/user_passwords;
    location / {
        〜略〜
    }
}

server { ~ } のコンテキストに記載してこのドメイン全てに反映。
http{ ~ } , location { ~ } に書いて、サーバーのhttp全体、特定ディレクトへの反映も可能

nginxでのワードプレスのパーマリンク設定

nginxでのワードプレスのパーマリンク設定

すこしはまったのでnginxでのwordpressのパーマリンク設定のメモ

ポイントとしては、“try_files $uri @wordpress;”と try_filesディクレティブでURLが見つからないファイルはすべて location @wordpress { ~ } ブロックに回す。
@wordpress { ~ } ブロックでは、リクエストのURIにかかわらずすべて index.phpを実行する設定とする。
以下設定全部。

server {
    #ポート80番をlisten
    listen       80;
    #マルチドメインのサーバー名
    server_name  cycling-course.okinawa;
    #ドキュメントルート
    root   /usr/share/nginx/html/cycling-course.okinawa;
    # ApacheでいうDirectoryIndex
    index  index.php index.html;
    # ロケーションドメイン/に適用ブロック
    location / {
        # 左側からマッチするかチェックしていく 
        # http://cycling-course.okinawa/2017/10/ だったら、$urlは、2017/10/
        # チェック1 '2017/10/' があるか
        # チェック2 '2017/10//' があるか
        # 適合がないので、@wordpressブロックを適用する
        try_files $uri $uri/ @wordpress;
    }
    # 拡張子が .phpにマッチした場合に適用されるブロック
    location ~ .php$ {
        # 前のブロック同様にマッチしなければ @wordpressブロックを適用する指定
        try_files $uri @wordpress;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        # 先に include しておかないと次の$fastcgi_script_nameが無効になって
        include  fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
    # ファイルがマッチしない場合に適用する@wordpressブロック
    location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        include  fastcgi_params;
        # ※ここがミソ。リクエストに関係なくすべて、index.phpを実行する
        fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
    }
}

参考サイト

http://qiita.com/egnr-in–6matroom/items/a08f4851bf16d0131e60

http://qiita.com/kotarella1110/items/f1ad0bb40b84567cea66

Powered by WordPress & Theme by Anders Norén