nginxの詳細設定

nginxの詳細設定

1. nginxのステータスページ

nginxのモジュールngx_http_auth_basic_module達成、あなたはnginxの-with-http_stub_status_moduleのインストールをコンパイルするとき、コンパイラのパラメータを追加する必要がある、または監視が完了した後にもとのconfigure構文エラーにプロンプ​​トが表示されます。

nginxのを出力するためのステータスページの基本的なステータス情報

location /nginx_status {
    stub_status;
    allow 192.168.0.0/16;
    allow 127.0.0.1;
    deny all;
}

マーク

アクティブな接続:現在アクティブなクライアント接続、無料接続のために待機している接続を含みます。
受け入れ:GDP統計を、nginxの開始以来、合計数は、クライアントの要求を受け入れました。
取り扱い:GDP統計を、nginxの開始は、クライアント要求の合計数の処理を完了しているので、そこのでない限り、通常は等しく、受け入れ
接続はworker_connectionsの制限を拒否しています。
リクエスト:GDP統計、nginxのは、クライアントから送信された開始からの要求の合計数。
読み:現在の状態を、ヘッダのクライアント接続要求パケットを読みます。
執筆:現在の状態を、応答がクライアントへの接続のパケット数の間に送信されています。
待機中:現在の状態を、クライアントがアイドルオープンケースのキープアライブの数を発行した接続要求を待っている、とこの値はアクティブに等しい- (+書き込みを読んで)、

2. nginxのサードパーティのモジュール:

第3のモジュールは、サードパーティのモジュールは、パラメータがカスタム開発を必要とnginxのは、指定されたパスPATHをインストール=企業のビジネスのための開発者がいくつかのモジュールを追加するコンパイル・モジュールを-add必要とのnginxの機能拡張がありますモジュールはその後、エコーモジュールなどのオープンソースとして、nginxのサポート、サードパーティ製のモジュールはソースのサポートから再コンパイルする必要があり、善行のgithubのオープン・ソース・モジュールを開発し、オープンソースの愛好家にアップロードされます

https://github.com/openresty/echo-nginx-module

インストールエコーモジュール

参考注意します。https://github.com/openresty/echo-nginx-module#installation

エコーモジュールnginxのとの互換ます。https://github.com/openresty/echo-nginx-module#compatibility

nginxのではコンパイルされ、エコーモジュールを追加されました

  1. エコーソースパッケージをダウンロードし、現在のプロセスnginxのを止めます

    root@z2:/usr/local/src# git clone https://github.com/openresty/echo-nginx-module.git
    root@z2:/usr/local/src# systemctl stop nginx
    
  2. 現在の環境を表示するとアドオンモジュールを追加する際に設定するために、現在のnginxのコンパイル済みのパラメータに影響を与えることはありません

    root@z2:/usr/local/src# nginx -V
    nginx version: nginx/1.16.1
    built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
    built with OpenSSL 1.1.1  11 Sep 2018
    TLS SNI support enabled
    configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
    
  3. オリジナルのソースパッケージnginxのに切り替え

    root@z2:/usr/local/src# cd nginx-1.16.1/
    
  4. コンパイラ環境を再構築します。

    ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/usr/local/src/echo-nginx-module
    
  5. コンパイル(make installをなし)

    makeがすべてのプログラムやファイル用に生成された場合には、単にmake installを、いわゆるインストールを完了するために、適切なディレクトリに生成されたファイルをコピーします

    root@z2:/usr/local/src/nginx-1.16.1# make
    
  6. あなたが再起動することができ、それらをコピーしnginxのプログラムの新世代、元nginxのメインプログラムファイルを置き換え、

    root@z2:/usr/local/src/nginx-1.16.1/objs# mv /apps/nginx/sbin/nginx{,.bak} 
    
    root@z2:/usr/local/src/nginx-1.16.1# cd objs/
    root@z2:/usr/local/src/nginx-1.16.1/objs# cp nginx /apps/nginx/sbin/
    root@z2:/usr/local/src/nginx-1.16.1/objs# systemctl start nginx
    
  7. 検証

      location /hello {
    	default_type    text/plain;
        echo  "hello world";
    }
    

    http://www.mage.net/hello/にアクセスする場合、それはハロー世界が表示されます。

3. nginxの変数

組み込み変数変数nginxの変数は、構成ファイルで参照することができ、またはログが他のシーンの使用の関数として決定され、それが変数とカスタムに分けることができ、変数はnginxのモジュールは、クライアントの多くの変数によって取得されるようになるに構築されています関連する値にアクセスします。

3.1組み込み変数

公式ドキュメント

以下は、一般的な変数です

$remote_addr;
#存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。
$args;
#变量中存放了URL中的指令,例如http://www.magedu.net/main/index.do?id=20190221&partner=search中的id=20190221&partner=search
$document_root
#保存了针对当前资源的请求的系统根目录,如/apps/nginx/html。
$document_uri
#保存了当前请求中不包含指令的URI,注意是不包含请求的指令,比如 http://www.magedu.net/main/index.do?id=20190221&partner=search会被定义为/main/index.do
$host
#存放了请求的host名称。
$http_user_agent
#客户端浏览器的详细信息
$http_cookie
#客户端的cookie信息。
limit_rate 10240;
echo $limit_rate;
#如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0。
$remote_port
#客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。
$remote_user;
#已经经过Auth Basic Module验证的用户名。
$request_body_file
#做反向代理时发给后端服务器的本地资源的名称。
$request_method
#请求资源的方式,GET/PUT/DELETE等
$request_filename
#当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,
如/apps/nginx/html/main/index.html
$request_uri
#包含请求参数的原始URI,不包含主机名,如:/main/index.do?id=20190221&partner=search 。
$scheme
#请求的协议,如ftp,https,http等。
$server_protocol
#保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。
$server_addr
#保存了服务器的IP地址。
$server_name
#请求的服务器的主机名。
$server_port
#请求的服务器的端口号。
3.2カスタム変数

カスタム変数名と値を必要に応じて、命令を使用すると、$変数の値を設定し、次のように、あります

コンテキスト:サーバ、場所、場合

Syntax: set $variable value; Default: — 
location /zdy {
    default_type    text/plain;
    set $name mage;
    echo $name;
    set $my_port $server_port;
    echo $my_port;
    echo "$server_name:$server_port";
}

認証:アクセスhttp://www.mage.net/zdy/結果

magedu
80
www.mage.net:80

4. nginxのカスタムアクセスログ

アクセスログは、グローバルコンフィギュレーションモジュールのerror_logログは、ユーザーの特定のクライアントがコンテンツの情報を要求されたレコードのログの記録レベルであり、パスnginxのサーバーは非常に本質的に異なる、実行されているが、一般的にのみnginxのエラーログされ保存されますAが、アクセスログを複数定義することができる、ログが異なるaccess_logの指定されたログサーバにパスを保存する必要性を定義し、ログLOG_FORMAT形式を指定し、ログの特定の内容に定義されたフォーマットを保存します。

4.1ソースフォーマットは、ログを保持する場合は、次のようにログがちょうど対応するコンテンツを追加、構成があります。

':$ SERVER_PORT $ SERVER_NAME' を追加します。

HTTPのconfigure

log_format nginx_format1 '$remote_addr - $remote_user [$time_local]"$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"' '$server_name:$server_port';

サーバー構成されました

access_log /data/nginx/logs/www-mage-net_access.log nginx_format1;

検証:

http://www.mage.net/アクセスする場合、バックログがwww.mage.net:80あり

root@z2:~# tail -f /data/nginx/logs/www-mage-net_access.log 

192.168.0.1 - - [12/Mar/2020:10:31:16 +0800]"GET /zdy HTTP/1.1" 200 47 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"www.mage.net:80

ログの4.2カスタムJSON形式

nginxのデフォルトのアクセスログは内容が比較的単純で記録し、デフォルトのフォーマットは、本番環境では、通常、ポストログ統計分析を行うことは容易ではない
統計- -分析ログのJSON nginxのログを変換し、ログ収集ELKを使用して行います。

そのキー値モード

log_format access_json '{"@timestamp":"$time_iso8601",'
                                '"host":"$server_addr",'
                                '"clientip":"$remote_addr",'
                                '"size":$body_bytes_sent'
                                '"responsetime":$request_time,'
                                '"upstreamtime":"$upstream_response_time",'
                                '"upstreamhost":"$upstream_addr",'
                                '"http_host":"$host",'
                                '"uri":"$uri",'
                                '"domain":"$host",'
                                '"xff":"$http_x_forwarded_for",'
                                '"referer":"$http_referer",'
                                '"tcp_xff":"$proxy_protocol_addr",'
                                '"http_user_agent":"$http_user_agent",'
                                '"status":"$status"}';

access_log /data/nginx/logs/www-mage-net_access.log  access_json;
{"@timestamp":"2020-03-12T10:48:58+08:00","host":"192.168.1.102","clientip":"192.168.0.1","size":0"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"www.mage.net","uri":"/index.html","domain":"www.mage.net","xff":"-","referer":"-","tcp_xff":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36","status":"304"}

5. nginxの圧縮

ファイルの指定された型のnginxのサポートは、圧縮してからクライアントに送信するだけでなく、輸出の帯域幅の使用率を減らすことができます大幅に小さく圧縮永久歪み圧縮率、ソースよりも圧縮されたファイルのファイルサイズは、低減され、企業のIT支出が、適切なCPUリソースがかかります。

nginxのは、ファイルを圧縮機能モジュールngx_http_gzip_module、に依存している公式文書、次のように、設定手順は以下のとおりです。

#启用或禁用gzip压缩,默认关闭
gzip on | off;
#压缩比由低到高从1到9,默认为1
gzip_comp_level level;
#禁用IE6 gzip功能
gzip_disable "MSIE [1-6]\.";
#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服务需要向服务器申请的缓存空间的个数*大小,默认32 4k|16 8k;
gzip_buffers number size;
#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...;
#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
gzip_vary on | off;

例:

gzip on;
gzip_comp_level 5;
gzip_min_length 1k;

gzip_types text/plain application/javascript application/x-javascript
text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg
image/gif image/png;

gzip_vary on;

圧縮した後、

マーク

マーク

前には圧縮しません

root@z2:~# ll  /data/nginx/html/pc/test.html 
-rw-r--r-- 1 root root 1086284 Mar 12 11:48 /data/nginx/html/pc/test.html

root@z2:~# curl -I http://www.mage.net/test.html
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 12 Mar 2020 04:01:55 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1086284
Last-Modified: Thu, 12 Mar 2020 03:48:20 GMT
Connection: keep-alive
ETag: "5e69b104-10934c"
Accept-Ranges: bytes

[チェーンが失敗したイメージのダンプ、発信局は、直接アップロード(IMG-9wbB3aYK-1584259839251)(A:%5Cimage_typoral_used%5Cimage-20200312120616343.png)ダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです]

6. HTTPS機能

HTTPSを使用して、Webサイトのログインページには、データのセキュリティを確保するために暗号化されたデータの伝送を暗号化され、HTTPS、第三者が機密情報を取得するために、情報をないように暗号化することができ、セキュリティの多くの銀行サイトや電子メールサービスなどのより高いレベルそうHTTPSプロトコルを使用する、HTTPSは、実際2つの部分から構成されている:HTTPモジュールのHTTP + SSL / TLS、すなわち暗号化された情報を処理する層を追加しました。送信されたサービスとクライアントの情報は、データ伝送は、データを暗号化されているので、後に、TLSで暗号化されています。

次のように6.0 httpsの実装プロセスは以下のとおりです。

マーク

  1. クライアントが開始HTTPSリクエスト:

    ウェブ側のHTTPSアドレス、通常はポート443へのクライアントアクセス

  2. サーバーの構成

    証明書を持っている必要があります。httpsプロトコルサーバーを使用すると、プロンプトが表示された証明書は、証明書が独自に行うために信頼されていないことを示しているとき、あなたはWebサイトを訪問したときに、独自の、国内の多くのサイトが、それを自分で行うさせることができ、いくつかの組織のために適用することができます証明書は、公開鍵と秘密鍵であり、鍵と鍵穴のように、通常の状況、あなたがロックを開くことができる唯一のキーの下に、あなたはお金で満たされた箱、で彼をロックし、他の誰かにこれを与えることができますまたは秘密、他の人が内部に配置するかわからないし、他の人が開いていない、唯一のあなたの鍵を開けることができます。

  3. 譲渡証明書

    クライアント譲渡証明書のサーバーは、実際には、例えば、多くの情報が含まれている公開鍵は、認証局、有効期限などを取得します。

  4. クライアント証明書の解析

    証明書が生成されている場合、作業のこの部分は、あなたは問題がある可能性があります警告ボックスが異常プロンプト証明書をポップアップ表示されます見つけた場合、そのようなので、上の権限、有効期限やなどの公開鍵の有効性を検証するために、クライアント、最初のバックを完了すると、問題はありませんランダムな値、およびステップ2は、人々が見ることができるではない、ランダムな値がロックアップ言ったように、ランダムな値の証明書で暗号化されました。

  5. 暗号化されたデータ転送ステップ4

    通信クライアントとサーバはランダムな値で復号化暗号化することができた後、目的のサーバは、このランダムな値を取得できるようにすることです、サーバーに暗号化証明書用の乱数を渡すことです

  6. サービス側復号化情報

    ランダムな値は、クライアントランダムな値(秘密鍵)を超えるパスを取得するために、復号化ステップ5へのサーバの秘密鍵を使って暗号化して、暗号化された対称型コンテンツ値、および対称暗号化秘密鍵情報は、アルゴリズム的です後混合一緒に、あなたが秘密鍵を知っている、またはその内部のコンテンツを入手することができませんが、ちょうど、クライアントとサーバは秘密アルゴリズムは、データのセキュリティを保証するのに十分な複雑になることがあります限り、この秘密鍵を知っている場合を除きます。

  7. トラフィック暗号化情報

    クライアントへの暗号化データへの秘密鍵を送信するサーバーは、クライアントは、元のデータの内容に低減することができます。

  8. クライアントの復号化情報

    データは、データを取得するために第三者が詳細を知ることができない場合でもそう、暗号化されているので、サーバー上を通過して得られたデータを復号化するための秘密鍵の終了前に顧客の世代。

6.1 SSLの設定パラメータ

HTTPS nginxの機能ngx_http_ssl_module実装モジュールは、それがコンパイルされ、使用パラメータにしたいnginxのインストールされているベースの場合は
オープンSSL機能ngx_http_ssl_moduleが、nginxののコア機能として、yumをnginxのインストールビルドパラメータを指定するnginxのニーズを、デフォルトでオンにコンパイルされ、インストールされています- -http_ssl_moduleでオープン、公式文書、次のように、設定パラメータは、次のとおりです。

ssl on | off;
#为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代。

ssl_certificate /path/to/file;
#当前虚拟主机使用使用的公钥文件,一般是crt文件

ssl_certificate_key /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
#支持ssl协议版本,早期为ssl现在是TSL,默认为后三个

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
#配置ssl缓存  off: 关闭缓存  none: 通知客户端支持ssl session cache,但实际不支持
#builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
#[shared:name:size]:在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称。

ssl_session_timeout time;#客户端连接可以复用ssl session cache中缓存的有效时长,默认5m
6.2自己署名証明書
root@z2:~# cd /apps/nginx/
root@z2:/apps/nginx# mkdir certs
root@z2:/apps/nginx# cd certs/

CN BJ BJメイジのRS mage.caを記入

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt

塗りつぶしCN BJ BJ魔法使いdevのwww.mage.net

openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.mage.net.key -out www.mage.net.csr

証明書の交付

openssl x509 -req -days 3650 -in www.mage.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.mage.net.crt

サーバーの設定

listen 443 ssl;
ssl_certificate /apps/nginx/certs/www.mage.net.crt;
ssl_certificate_key /apps/nginx/certs/www.mage.net.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
6.3マルチドメインHTTPS

nginxのは、マルチドメイン機能を実現するために、単一のIPをサポートし、また、nginxのは、実際に基づいており、マルチHTTPSを実装するIPに基づいて単一のドメイン名をサポートしてい
SNI(Serverの名前表示)を達成するための機能、SNIは、IPを使用してnginxのサーバーを解決することです複数のドメイン名と証明書バインディング
機能を、その機能をクライアントに固有のものではSSLリンクを確立するために、サーバーに接続する前にサイトにアクセスするには、ドメイン名(ホスト名)を送信し、このサービスは
、クライアントに、ドメイン名に応じた適切な証明書を返されます。

各サーバーは、別の証明書パスを設定することができます

favicon.icoを約7

favicon.icoをファイルのアイコンは、クライアントがページを尋ねるために、ブラウザを使用して、ブラウザのURLのコレクションは、ブラウザが自分のページには、ファイルをfavicon.icoを取得するための要求を開始しますときに表示されますが、ときfavicon.icoをファイルブラウザのリクエスト存在しない場合は、サーバーは、レコード404を記録します、そしてブラウザは404エラーが表示されます。(カールブラウザはしません)

{"@timestamp":"2020-03-12T18:23:35+08:00","host":"192.168.1.102","clientip":"192.168.0.1","size":548"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"www.mage.net","uri":"/favicon.ico","domain":"www.mage.net","xff":"-","referer":"https://www.mage.net/","tcp_xff":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36","status":"404"}

ソリューション:

1.ないレコードのログ関連

location = /favicon.ico {
    log_not_found off;
    access_log off;
}

2.設定favicon.icoを場所

例えば:1日猫はを使用してサイトにfavicon.icoを

マーク

他のを確認し、以下の画像は、小さな、ダウンロードです

root@z2:~# mkdir /data/nginx/html/pc/images
root@z2:~# cd  /data/nginx/html/pc/images
root@z2:/data/nginx/html/pc/images# wget https://img.alicdn.com/tfs/TB1XlF3RpXXXXc6XXXXXXXXXXXX-16-16.png
root@z2:/data/nginx/html/pc/images# mv TB1XlF3RpXXXXc6XXXXXXXXXXXX-16-16.png  favicon.ico

confに設定:

#location ~ ^/favicon\.ico$ {
location = /favicon.ico {
	root /data/nginx/html/pc/images;
}

検証:

マーク

公開された62元の記事 ウォン称賛7 ビュー1257

おすすめ

転載: blog.csdn.net/qq_36801585/article/details/104880473