关于Nginx的总结(配置部分)

概要 – 简而言之

上次:关于nginx的总结(入门篇)

本次研究主要调查了Apache中常用的功能,并针对不同目的进行配置方法的调查。

设置文件的规则

モジュール = nginxの構成単位

設定ファイルはモジュール単位で記述する

http{
# httpモジュールの設定
}

# coreモジュールの設定はくくる必要がない

モジュール名
内容

core
プロセス制御、設定ファイル制御、ロギング

event
イベント処理(パフォーマンス・チューニング

http
webサーバ関連の設定

mail
メール関連の設定

ディレクティブ = 命令

ディレクティブは他のディレクティブを内包し得る

http{
server{
# …
}
}

コンテキスト = モジュールあるいはディレクティブが作るスコープ

{ } で囲まれた範囲を指す
coreモジュールのコンテキスト(一番外側)はmainコンテキストと呼ばれる

设定其他目的的示例

常规设置

指定执行用户

# nginxユーザを設定
user nginx;

读取配置文件

通过在nginx.conf的配置文件中编写include命令,可以实现其他配置文件的加载。和Apache类似,配置文件通常存放在conf.d/目录下。

include /usr/local/etc/nginx/conf.d/ssl.conf

调整表演

worker_processにより実行プロセス数を指定できる

# 2プロセスで動かす
# CPUのコア数より多く設定してもパフォーマンスは上がらないとのこと
worker_processes 2;

worker_connectionsによりコネクション数を制限する

events{
    worker_connections  512;
}
    その他、keepalive_requests、keepalive_timeout、tcp_nopush, tcp_nodelayなどなど…

指定错误日志

httpなど、core以外のコンテキストに対して個別に設定が可能

ログレベルを設定可能

デフォルトはコンテキストに依存する
レベルは低い順に、debug, info, notice, warn, error, crit, alert, emerg

エラーログに対してフォーマットを指定する方法は不明だった。レベル指定以外できない?

error_log  logs/nginx/error.log debug;

Web服务器设置

基本设定

listen によりIPとポートを指定する

server_nameによりサーバ名を指定する

rootによりドキュメントルートを指定する

charsetによりレスポンスヘッダのContent-typeを指定する

http{
    # listenはポートのみ指定でも可
    listen 80;
    server_name www.example.com;
    root /var/www/html/www.example.com;
    charset UTF-8;
}

设定访问日志

log_formatで、フォーマットに名前をつけて保持する

フォーマットの指定方法については公式を参照のこと。
昔ながらの記号方式ではなく、$time_localのような定数形式で記述する

access_logで、ログの種類と出力先を指定する

http{
    log_format formatA '[$time_local]$connection - $status';
    access_log formatA /var/logs/nginx/access_log
}

建立虚拟服务器

基于域名

serverを復数記述することで、仮想サーバとして動作する

http内に記述できるディレクティブは、だいたいserver内にも記述できる様子

http{
    server{
        server_name alpha.example.com;
    }
    server{
        server_name bravo.example.com;
    }
}
基于IP

listenで別個のIPを指定することで、IPベースの仮想サーバを構築できる

http{
    server{
        listen 192.168.0.1:80;
        server_name alpha.example.com;
    }
    server{
        listen 192.168.0.2:80;
        server_name bravo.example.com;
    }
}

指定别名

locationにより、パスごと個別のドキュメントルートを設定可能

http{
    server{
        location /foo{
            root /path/to/foo;
        }
        location /bar{
            root /path/to/bar;
        }
    }
}
    なお、indexファイルはindexで指定できた
http{
   index index.html index.htm;
}

展示/不展示文件列表

    Apacheでいうところのindexesは、autoindexで指定できる
http{
    # ファイル一覧を有効化
    autoindex on;
}

IP过滤

allow / denyでアクセスを許可 / 拒否する

http{
    allow 127.0.0.1;
    deny all;
}

此外,在设置文件之上的规则会被优先考虑。

# allowが優先されるため、全アクセスを許可する
http{
    allow all;
    deny all;
}

# denyが優先されるため、全アクセスを拒否する
http{
    deny all;
    allow all;
}

設置基本驗證

auth_basicでBASIC必須の旨とメッセージを、auth_basic_user_fileで.htpasswdファイルを設定する

http{
    auth_basic "BASIC AUTH";
    auth_basic_user_file /path/to/.htpasswd;
}

支持SSL(https)

listenで443ポートを使うことを指定

sslでSSLを有効に

ssl_certificateで証明書+中間証明書のファイルを指定

ssl_certificate_keyで秘密鍵を指定

http{
    # listen 443; ssl on; のように別々のディレクティブでも設定できる
    # 現行の版(>= v1.15.0)ではsslディレクティブは廃止されているので注意
    listen 443 ssl;

    ssl_certificate      /path/to/cert.pem;
    ssl_certificate_key  /path/to/cert.key;  
}

设置重写规则

rewriteでルールを指定する

lastフラグを付けると、rewrite後にlocationディレクティブを再評価する

breakフラグの場合は再評価しない

# /a/b を /a-bに変換する
rewrite ^/(.*)/(.*)$ $1-$2 last;

请问有什么问题需要解答吗?

听说没有`.htaccess`。

据我所知,目前没有像.htaccess那样将动态设置文件按文件夹分类放置的机制。

控制句法

setによる変数定義, ifによる条件分岐など、スクリプト的な機能もある様子
ただドキュメントを見ると、このディレクティブはrewrite関連の様子。それ以外の目的では使えない…?

请参考

    • nginx – nginx documentation

 

    • Qiita – Nginx設定のまとめ

 

    • Qiita – Apacheからnginxへ移行する際に気になったことメモ

 

    • インフラエンジニアWay – nginx連載3回目: nginxの設定、その1

 

    • インフラエンジニアWay – nginx連載4回目: nginxの設定、その2 – バーチャルサーバの設定

 

    • Siguniang’s Blog – nginx rewriteのlastとbreakの違い

 

    遍歴プログラマ日記 – 実例で学ぶ、Nginxのrewriteに指定できるbreakとlastの違い
广告
将在 10 秒后关闭
bannerAds