关于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の違い