NGinxを使用する際に使用するベストプラクティスは何ですか?
NGinxを使用する際に使用するベストプラクティスは何ですか?
回答:
HTTPブロックとHTTPSブロックを組み合わせる方法。
server {
listen 80;
listen 443 default ssl;
# other directives
}
これは、別の質問への回答として投稿されました。こちらをご覧ください。
断然、私がこれまで見た中で最高のヒントは、その落とし穴ページの著者からです:https : //www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
一般的に、「if」の使用は悪い習慣です(nginxの作者による)。可能であれば、代わりにerror_pageディレクティブのtry_fileを使用する方が「if(-f ...)」
tipをmaintenence.htmlファイルと組み合わせて、tipをtry_filesと組み合わせます:
場所/ { try_files /maintenance.html $ uri $ uri / @wordpress; }
メンテナンスが終了したら、$ rootからmv maintenance.htmlを実行します。
if (-f ...) { return 503; }
andを使用することerror_page 503 /maintenance.html
です。どう思いますか?
より強力なSSL暗号を使用するようにnginxを構成します。デフォルトでは、SSLv2は有効になっています(可能な場合は無効にする必要があります)。
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
map
一致するサブドメインのルートを切り替えるときに、正規表現の代わりにディレクティブを使用する方が効率的です。
server {
server_name mysite.tld ~^.+\.mysite\.tld$;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
}
empty_gif
モジュールもある非常にあなたが(のnagios / MONITの/ etcを使用して)ウェブサーバからの応答を監視する必要が場合は特に、便利:
location /token {
empty_gif;
}
location /favicon.ico {
empty_gif;
}
location /img/1px.gif {
empty_gif;
}
access_log off;
これらの場所のための一般的な方法である
メンテナンスページを返すための優れた方法を次に示します。すべてのリクエストが書き換えられ、正しいhttpコードが返されます。(503-サービスは利用できません)
error_page 503 /maintenance.html;
location /
{
if (-f $document_root/maintenance.html)
{
return 503;
}
try_files $uri /index.php?$args;
}
location = /maintenance.html
{
rewrite ^ /maintenance.html break;
}
if
と判断します。ステートメントを正しく使用すれば、ステートメントに問題はありませif
ん。ただやっているreturn xxx;
。
location = /maintenance.html { break; }
必要ですか?
nginx 0.7.12以降では、server_nameで ""を使用して、 "Host"ヘッダーのない要求をキャッチできます。
未定義の仮想ホストのキャッチオールとして次を使用できます。
server {
server_name _ "";
}
また、古いブラウザでは単にgzipブランケットの問題があるため、nginxでgzip圧縮を適切に処理する方法についても少し前に投稿しました。HTH。
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
それがベストプラクティスであるかどうかはわかりませんが、nginxでネストされた条件を取得するのは間違いなくきちんとしたハックです。nginx wikiのサンプルを次に示します。
location /xxxx/ {
set $test "";
if ($request_method = POST) {
set $test P;
}
if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
set $test "${test}C";
}
if ($test = PC) {
#rewrite rule goes here.
}
}
同じサーバーブロックで処理されるサブドメインのhttpとhttpsをコンテキスト的に切り替える必要がある場合は、変数を使用して切り替えることができます。物事を行う最も効率的な方法ではないかもしれませんが、それは動作します:
server {
server mysite.tld ~^.+\.mysite\.tld$;
set $req_ssl = 0;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
if ( $files = "admin" ){
set $req_ssl 1;
}
if ( $files = "common" ){
set $req_ssl 2;
}
if ( $scheme = http )
{
set $req_ssl $req_ssl.1;
}
if ( $scheme = https )
{
set $req_ssl $req_ssl.2;
}
if ($req_ssl = 1.1){
rewrite ^ https://$host$uri;
}
if ($req_ssl = 2.2){
rewrite ^ http://$host$uri;
}
}
常にroot
サーバーブロックの上部でディレクティブを使用しようとするので、$document_root
変数を利用できroot
、ロケーションブロック内にディレクティブを含めないでください。
Nginx wiki のPitfallsページには、ベストプラクティスに関する素晴らしいヒントがあります。
プロキシとしてnginxを使用している場合、タイムアウト設定を調整することは、特にトラフィックの多いアプリケーションを処理している場合、nginxが接続を完了する前に接続をドロップしないようにするために重要です。
proxy_connect_timeout
proxy_send_timeout