Openrestyベストケース|第1編:Nginx紹介
転載は出典を明記してください.http://blog.csdn.net/forezp/article/details/78616591本文は方志朋のブログから
個人ブログの純版:https://www.fangzhipeng.com/openresty/2018/01/01/openresty-best-practice-1-Nginx.html
Nginxの概要
Nginxは高性能のWebサーバであり、同時に効率的な逆エージェントサーバであり、IMAP/POP 3/SMTPエージェントサーバでもある.
Nginxはイベント駆動のアーキテクチャを採用しているため、同時百万レベルのtcp接続を処理することができ、高度なモジュール化設計と自由なBSDライセンスにより、Nginxは非常に豊富なサードパーティモジュールを持っている.例えばOpenresty、APIゲートウェイKong.
BSDオープンソースプロトコルは,利用者に大きな自由を与えるプロトコルである.基本的に利用者は「やりたい放題」で、自由に使用したり、ソースコードを修正したり、修正したコードをオープンソースや独自のソフトウェアとして再配布したりすることができます.
Nginxの利点高同時応答性能は非常に良く、公式Nginx処理静的ファイル同時5 w/s リバースエージェントのパフォーマンスは非常に優れています.(負荷等化に使用可能) メモリとcpuの使用率が低い.(Apacheの1/5-1/10) バックエンドサービスには健康診断機能があります. はPHP cgi方式とfastcgi方式をサポートしている. 構成コードは簡潔で使いやすい.
Nginxのインストール
Centosシステムのインストールは、こちらを参照してくださいhttp://www.linuxidc.com/Linux/2016-09/134907.htm.貼り付けた文章をコピーします.
1.gcc取付
nginxをインストールするには、まず公式サイトでダウンロードしたソースコードをコンパイルする必要があります.コンパイルはgcc環境に依存します.gcc環境がなければ、インストールする必要があります.
yum install gcc-c++
2.PCRE pcre-develインストール
PCRE(Perl Compatible Regular Expressions)は、Perl互換性のある正規表現ライブラリを含むPerlライブラリです.nginxのhttpモジュールはpcreを使用して正規表現を解析するため、linuxにpcreライブラリをインストールする必要があります.pcre-develはpcreを使用して開発された二次開発ライブラリです.nginxにもこのライブラリが必要です.コマンド:
yum install -y pcre pcre-devel
3.zlibインストール
zlibライブラリは圧縮と解凍の方法を多く提供しており、nginxはzlibを使用してhttpパッケージの内容をgzipするため、Centosにzlibライブラリをインストールする必要があります.
yum install -y zlib zlib-devel
4.OpenSSLインストール
OpenSSLは強力なセキュリティソケット層暗号ライブラリであり、主な暗号アルゴリズム、一般的な鍵と証明書パッケージ管理機能、SSLプロトコルを網羅し、テストやその他の目的で豊富なアプリケーションを提供しています.nginxはhttpプロトコルだけでなく、http(すなわち、sslプロトコル上でhttpを転送する)もサポートするので、CentosにOpenSSLライブラリをインストールする必要があります.
yum install -y openssl openssl-devel
5.公式サイトのダウンロード
1.直接ダウンロードtar.gzインストールパッケージ、アドレス:https://nginx.org/en/download.html
2.wgetコマンドを使用してダウンロードします(推奨).
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
6.解凍
直接コマンド:
tar -zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1
7.構成
実はnginx-1.10.1バージョンでは、関連するものを構成する必要はありません.デフォルトでいいです.もちろん、自分でディレクトリを構成してもいいです.デフォルト設定の使用
./configure
8.コンパイルインストール
make make install
インストールパスを検索するには、次の手順に従います.
whereis nginx
Nginxのモジュール構成
Nginxのモジュールは、コアモジュール、ベースモジュール、サードパーティモジュールに構造的に分けられます.コアモジュール:HTTPモジュール、EVENTモジュール及びMAILモジュール 基礎モジュール:HTTPアクセスモジュール、HTTP FastCGIモジュール、HTTP ProxyモジュールとHTTP Rewriteモジュール、 サードパーティモジュール:HTTP Upstream Request Hashモジュール、Noticeモジュール、HTTP Access Keyモジュール.
Nginxの高同時性は、epollモデルを採用したおかげで、従来のサーバプログラムアーキテクチャとは異なり、epollはlinuxカーネル2.6以降に現れたものです.Nginxはepollモデルを採用し,非同期非ブロックであり,Apacheはselectモデルを採用した. Selectの特徴:selectがハンドルを選択する場合、すべてのハンドルを巡回します.つまり、イベント応答がある場合、selectはすべてのハンドルを巡回してイベント通知を取得する必要があります.そのため、効率は非常に低いです. epollの特徴:epollはハンドルイベントの選択に対して遍歴的ではなく、イベント応答的であり、ハンドル上のイベントが来たらすぐに選択され、ハンドルチェーンテーブル全体を遍歴する必要がないため、効率が非常に高い.
Nginx共通コマンド
nginx環境変数の構成:
export PATH=$PATH:/usr/servers/nginx/sbin nginxプロセスps-ef|grep nginx を表示起動nginx nginx起動結果は、nginxのメインスレッドとワークスレッド、ワークスレッドの数とnginxを示す.confの構成パラメータworker_プロセス関係. スムーズ起動nginx kill-HUP 強制停止nginx pkill-9 nginx 検査対nginx.confファイルの変更が正しいかnginx-t nginxを停止するコマンドnginx-s stopまたはpkill nginx nginxのバージョン情報を表示nginx-v 完全なnginxの構成情報を表示nginx-V Nginxの構成
通常、Nginxの構成は、Ngixのインストールディレクトリの下の/conf/configにある.defaultファイルでは、基本的な構成は次のとおりです.
locationの一般的な構成は次のとおりです.
を選択します.
意味
location =/uri
=完全一致のみ有効な正確な一致を示します.
location ^~/uri
^~先頭にURLパスを接頭辞で照合し、正則の前にします.
location ~ pattern
先頭は大文字と小文字を区別する正規一致を表します
location ~* pattern
大文字と小文字を区別しない正規一致を先頭に表示
location/uri
修飾子なし、接頭辞マッチングも表しますが、正規マッチングの後
location/
汎用マッチングでは、switchのdefaultに相当する他のlocationに一致していないリクエストが一致します.
Nginxの一般的な構成は非常に多く、以下の内容はブール教育の授業から抜粋されています.参考にしてください.
構成の詳細2は次のとおりです.
Nginx内蔵バインド変数
名前
説明
$arg_name
リクエストのnameパラメータ
$args
要求のパラメータ
$binary_remote_addr
リモートアドレスのバイナリ表示
$body_bytes_sent
送信されたメッセージボリュームバイト数
$content_length HTTP
リクエストメッセージの「Content-Longth」
$content_type
リクエスト情報の「Content-type」
$document_root
現在のリクエストに対するルートパスの値の設定
$host
要求情報の「Host」は、要求にHost行がない場合に設定されたサーバ名に等しい
$hostname
マシン名gethostnameシステム呼び出しの値を使用する
$http_cookie
クッキー情報
$http_referer
リファレンスアドレス
$http_user_agent
クライアントエージェント情報
$http_via
最後のアクセスサーバのIpアドレス.
$http_x_forwarded_for
ネットワークアクセスパスに相当
$is_args
要求行にパラメータがある場合は「?」を返します.そうでなければ空の文字列を返します
$limit_rate
接続速度の制限
$nginx_version
現在実行されているnginxバージョン番号
$pid worker
プロセスのPID
$query_string
argsと同じ
$realpath_root
root命令またはalias命令で算出された現在の要求の絶対パス.シンボルリンクはファイルパスとして解析され、Nginx内蔵バインド変数を使用します.
207$remote_addr
クライアントIPアドレス
$remote_port
クライアントポート番号
$remote_user
クライアントユーザ名、認証用
$request
ユーザー要求
$request_body
この変数(0.7.58+)には、リクエストの主な情報が含まれます.proxy_を使用passまたはfastcgi_pass命令のlocationで比較的意義がある
$request_body_file
クライアント要求マスター情報の一時ファイル名
$request_completion
要求が成功した場合は「OK」とする.要求が完了していないか、または一連の要求の最後の部分でない場合は、空に設定します.
$request_filename
現在要求されているファイルパス名、例えば/opt/nginx/www/test.php
$request_method
「GET」「POST」など、リクエストの仕方
$request_uri
要求されたURI、パラメータ付き
$scheme
httpやhttpなどのプロトコルが使用されます
$server_addr
サーバアドレス、listenでサーバアドレスを指定しない場合、この変数を使用すると、アドレスを取得するためにシステム呼び出しが開始されます(リソースの浪費をもたらします).
$server_name
要求されたサーバ名
$server_port
要求されたサーバーポート番号
$server_protocol
要求されたプロトコルバージョン、「HTTP/1.0」または「HTTP/1.1」
$uri
リクエストされたURIは、リダイレクトされたものなど、最初の値とは異なる場合があります.
参考資料
http://www.linuxidc.com/Linux/2016-09/134907.htm
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/nginx.html
ブール教育の授業
詳細
史上最も簡単なSpringCloudチュートリアルの概要
SpringBootチュートリアルの概要
Java面接問題シリーズまとめ
スキャンコード公衆番号に注目サプライズ
(当駅の文章を転載するには作者と出典方志朋のブログを明記してください)
個人ブログの純版:https://www.fangzhipeng.com/openresty/2018/01/01/openresty-best-practice-1-Nginx.html
Nginxの概要
Nginxは高性能のWebサーバであり、同時に効率的な逆エージェントサーバであり、IMAP/POP 3/SMTPエージェントサーバでもある.
Nginxはイベント駆動のアーキテクチャを採用しているため、同時百万レベルのtcp接続を処理することができ、高度なモジュール化設計と自由なBSDライセンスにより、Nginxは非常に豊富なサードパーティモジュールを持っている.例えばOpenresty、APIゲートウェイKong.
BSDオープンソースプロトコルは,利用者に大きな自由を与えるプロトコルである.基本的に利用者は「やりたい放題」で、自由に使用したり、ソースコードを修正したり、修正したコードをオープンソースや独自のソフトウェアとして再配布したりすることができます.
Nginxの利点
Nginxのインストール
Centosシステムのインストールは、こちらを参照してくださいhttp://www.linuxidc.com/Linux/2016-09/134907.htm.貼り付けた文章をコピーします.
1.gcc取付
nginxをインストールするには、まず公式サイトでダウンロードしたソースコードをコンパイルする必要があります.コンパイルはgcc環境に依存します.gcc環境がなければ、インストールする必要があります.
yum install gcc-c++
2.PCRE pcre-develインストール
PCRE(Perl Compatible Regular Expressions)は、Perl互換性のある正規表現ライブラリを含むPerlライブラリです.nginxのhttpモジュールはpcreを使用して正規表現を解析するため、linuxにpcreライブラリをインストールする必要があります.pcre-develはpcreを使用して開発された二次開発ライブラリです.nginxにもこのライブラリが必要です.コマンド:
yum install -y pcre pcre-devel
3.zlibインストール
zlibライブラリは圧縮と解凍の方法を多く提供しており、nginxはzlibを使用してhttpパッケージの内容をgzipするため、Centosにzlibライブラリをインストールする必要があります.
yum install -y zlib zlib-devel
4.OpenSSLインストール
OpenSSLは強力なセキュリティソケット層暗号ライブラリであり、主な暗号アルゴリズム、一般的な鍵と証明書パッケージ管理機能、SSLプロトコルを網羅し、テストやその他の目的で豊富なアプリケーションを提供しています.nginxはhttpプロトコルだけでなく、http(すなわち、sslプロトコル上でhttpを転送する)もサポートするので、CentosにOpenSSLライブラリをインストールする必要があります.
yum install -y openssl openssl-devel
5.公式サイトのダウンロード
1.直接ダウンロードtar.gzインストールパッケージ、アドレス:https://nginx.org/en/download.html
2.wgetコマンドを使用してダウンロードします(推奨).
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
6.解凍
直接コマンド:
tar -zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1
7.構成
実はnginx-1.10.1バージョンでは、関連するものを構成する必要はありません.デフォルトでいいです.もちろん、自分でディレクトリを構成してもいいです.デフォルト設定の使用
./configure
8.コンパイルインストール
make make install
インストールパスを検索するには、次の手順に従います.
whereis nginx
Nginxのモジュール構成
Nginxのモジュールは、コアモジュール、ベースモジュール、サードパーティモジュールに構造的に分けられます.
Nginxの高同時性は、epollモデルを採用したおかげで、従来のサーバプログラムアーキテクチャとは異なり、epollはlinuxカーネル2.6以降に現れたものです.Nginxはepollモデルを採用し,非同期非ブロックであり,Apacheはselectモデルを採用した.
Nginx共通コマンド
nginx環境変数の構成:
export PATH=$PATH:/usr/servers/nginx/sbin
cat /var/run/nginx.pid
またはnginx-s reload 通常、Nginxの構成は、Ngixのインストールディレクトリの下の/conf/configにある.defaultファイルでは、基本的な構成は次のとおりです.
worker_process # , cpu
worker_connections #
server{} #
listen #
server_name #
location {} # URI ,URI “/uri/”
location /{} # , /
root # uri , html ,
# /opt/nginx-1.7.7/html/
index # index , , 。
# , 。
locationの一般的な構成は次のとおりです.
を選択します.
意味
location =/uri
=完全一致のみ有効な正確な一致を示します.
location ^~/uri
^~先頭にURLパスを接頭辞で照合し、正則の前にします.
location ~ pattern
先頭は大文字と小文字を区別する正規一致を表します
location ~* pattern
大文字と小文字を区別しない正規一致を先頭に表示
location/uri
修飾子なし、接頭辞マッチングも表しますが、正規マッチングの後
location/
汎用マッチングでは、switchのdefaultに相当する他のlocationに一致していないリクエストが一致します.
Nginxの一般的な構成は非常に多く、以下の内容はブール教育の授業から抜粋されています.参考にしてください.
# Nginx
user www www;
# , cpu
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
# cpu, 8 8 cpu, , cpu。
worker_rlimit_nofile 102400;
# nginx ,
# (ulimit -n) nginx , nginx
#, ulimit -n 。
# PID
error_log /usr/local/nginx/logs/error.log;
# ,[ debug | info | notice | warn | error | crit ]
pid /usr/local/nginx/nginx.pid;
# nginx , ( ulimit -n) nginx , nginx .
# ulimit -n 。
worker_rlimit_nofile 65535;
#
events {
use epoll; #epoll IO(I/O Multiplexing) , linux2.6 , nginx
worker_connections 102400; # worker process ( = * )
multi_accept on; #
}
# http ,
http {
# mime , mime.type
include mime.types;
default_type application/octet-stream;
#
access_log /usr/local/nginx/log/nginx/access.log;
sendfile on;
#sendfile nginx sendfile (zero copy ) , on
# IO , off, I/O , uptime.
#autoindex on; # , , 。
tcp_nopush on; #
keepalive_timeout 60;
#keepalive , , , ,keepalive-timeout 。
tcp_nodelay on; #
# gzip
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2; # , 9, , ,CPU 。
# , CPU 。
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
client_max_body_size 10m; #
client_body_buffer_size 128k; # ,
proxy_connect_timeout 90; #nginx ( )
proxy_send_timeout 90; # ( )
proxy_read_timeout 90; # , ( )
proxy_buffer_size 4k; # (nginx)
proxy_buffers 4 32k; #proxy_buffers , 32k ,
proxy_busy_buffers_size 64k; # (proxy_buffers*2)
#
large_client_header_buffers 4 4k;
client_header_buffer_size 4k;
# , , 1k
# 1k, 。 getconf PAGESIZE 。
open_file_cache max=102400 inactive=20s;
# , ,max , ,inactive 。
open_file_cache_valid 30s;
# 。
open_file_cache_min_uses 1;
#open_file_cache inactive , , , , inactive
# ,
include vhosts.conf;
}
構成の詳細2は次のとおりです.
# wugk , ,tdt_wugk ,
# vhosts.conf pass , 。weight , fail_timeout max_fails , 。
upstream tdt_wugk {
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
}
#
server {
# 80
listen 80;
# www.wuguangke.cn
server_name www.wuguangke.cn;
#
access_log logs/access.log main;
root /data/webapps/wugk; #
index index.php index.html index.htm; #
#
location ~ /{
root /data/www/wugk; #
index index.php index.html index.htm; #
# .
proxy_next_upstream http_502 http_504 error timeout invalid_header;
# 502、504、 , upstream , 。
proxy_redirect off;
# Web X-Forwarded-For IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tdt_wugk; #
}
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# Nginx , Nginx 。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /data/www/wugk;
#expires 3 , , , 。
expires 3d;
}
#PHP FastCGI . FastCGI .
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name;
include fastcgi_params;
}
# Nginx
location /NginxStatus {
stub_status on;
}
}
}
Nginx内蔵バインド変数
名前
説明
$arg_name
リクエストのnameパラメータ
$args
要求のパラメータ
$binary_remote_addr
リモートアドレスのバイナリ表示
$body_bytes_sent
送信されたメッセージボリュームバイト数
$content_length HTTP
リクエストメッセージの「Content-Longth」
$content_type
リクエスト情報の「Content-type」
$document_root
現在のリクエストに対するルートパスの値の設定
$host
要求情報の「Host」は、要求にHost行がない場合に設定されたサーバ名に等しい
$hostname
マシン名gethostnameシステム呼び出しの値を使用する
$http_cookie
クッキー情報
$http_referer
リファレンスアドレス
$http_user_agent
クライアントエージェント情報
$http_via
最後のアクセスサーバのIpアドレス.
$http_x_forwarded_for
ネットワークアクセスパスに相当
$is_args
要求行にパラメータがある場合は「?」を返します.そうでなければ空の文字列を返します
$limit_rate
接続速度の制限
$nginx_version
現在実行されているnginxバージョン番号
$pid worker
プロセスのPID
$query_string
argsと同じ
$realpath_root
root命令またはalias命令で算出された現在の要求の絶対パス.シンボルリンクはファイルパスとして解析され、Nginx内蔵バインド変数を使用します.
207$remote_addr
クライアントIPアドレス
$remote_port
クライアントポート番号
$remote_user
クライアントユーザ名、認証用
$request
ユーザー要求
$request_body
この変数(0.7.58+)には、リクエストの主な情報が含まれます.proxy_を使用passまたはfastcgi_pass命令のlocationで比較的意義がある
$request_body_file
クライアント要求マスター情報の一時ファイル名
$request_completion
要求が成功した場合は「OK」とする.要求が完了していないか、または一連の要求の最後の部分でない場合は、空に設定します.
$request_filename
現在要求されているファイルパス名、例えば/opt/nginx/www/test.php
$request_method
「GET」「POST」など、リクエストの仕方
$request_uri
要求されたURI、パラメータ付き
$scheme
httpやhttpなどのプロトコルが使用されます
$server_addr
サーバアドレス、listenでサーバアドレスを指定しない場合、この変数を使用すると、アドレスを取得するためにシステム呼び出しが開始されます(リソースの浪費をもたらします).
$server_name
要求されたサーバ名
$server_port
要求されたサーバーポート番号
$server_protocol
要求されたプロトコルバージョン、「HTTP/1.0」または「HTTP/1.1」
$uri
リクエストされたURIは、リダイレクトされたものなど、最初の値とは異なる場合があります.
参考資料
http://www.linuxidc.com/Linux/2016-09/134907.htm
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/nginx.html
ブール教育の授業
詳細
史上最も簡単なSpringCloudチュートリアルの概要
SpringBootチュートリアルの概要
Java面接問題シリーズまとめ
スキャンコード公衆番号に注目サプライズ
(当駅の文章を転載するには作者と出典方志朋のブログを明記してください)