nginxの単方向の構成SSL
nginxの設定SSL
nginxの構成例(片道)
cp /etc/pki/ca_test/server/server.* /usr/local/nginx/conf/ { listen 443 ssl; server_name www.aminglinux.com; index index.html index.php; root /data/wwwroot/aminglinux.com; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL; ssl_prefer_server_ciphers on; ... }
設定手順
1. 443端口为ssl监听端口。
2. ssl on表示打开ssl支持。
3. ssl_certificate指定crt文件所在路径,如果写相对路径,必须把该文件和nginx.conf文件放到一个目录下。
4. ssl_certificate_key指定key文件所在路径。 5. ssl_protocols指定SSL协议。 6. ssl_ciphers配置ssl加密算法,多个算法用:分隔,ALL表示全部算法,!表示不启用该算法,+表示将该算法排到最后面去。 7. ssl_prefer_server_ciphers 如果不指定默认为off,当为on时,在使用SSLv3和TLS协议时,服务器加密算法将优于客户端加密算法。
nginxの設定相互認証
cp /etc/pki/ca_test/root/ca.crt /usr/local/nginx/conf/ 配置示例: { listen 443 ssl; server_name www.aminglinux.com; index index.html index.php; root /data/wwwroot/aminglinux.com; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL; ssl_prefer_server_ciphers on; ssl_client_certificate ca.crt; //这里的ca.crt是根证书公钥文件 ssl_verify_client on; ... }
クライアント(ブラウザ)の動作
如果不进行以下操作,浏览器会出现400错误。400 Bad Request(No required SSL certificate was sent)
首先需要将client.key转换为pfx(p12)格式
# cd /etc/pki/ca_test/client
# openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx //这一步需要输入一个自定义密码,一会在windows上安装的时候要用到,需要记一下。 然后将client.pfx拷贝到windows下,双击即可安装。 也可以直接curl测试: curl -k --cert /etc/pki/ca_test/client/client.crt --key /etc/pki/ca_test/client/client.key https
エラーログngxin
nginxのエラーログ
Nginx错误日志平时不用太关注,但是一旦出了问题,就需要借助错误日志来判断问题所在。
配置参数格式:error_log /path/to/log level;
nginxのエラーログレベル
常见的错误日志级别有debug | info | notice | warn | error | crit | alert | emerg 级别越高记录的信息越少,如果不定义,默认级别为error. 它可以配置在main、http、server、location段里。 如果在配置文件中定义了两个error_log,在同一个配置段里的话会产生冲突,所以同一个段里只允许配置一个error_log。 但是,在不同的配置段中出现是没问题的。
nginxのエラーログの例
error_log /var/log/nginx/error.log crit;
如果要想彻底关闭error_log,需要这样配置
error_log /dev/null;
nginxのアクセスログとログ形式
nginxのアクセスログのフォーマット
Nginx访问日志可以设置自定义的格式,来满足特定的需求。
アクセスログのフォーマットの例
示例1
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
'$host "$request_uri" $status' '"$http_referer" "$http_user_agent"'; 示例2 log_format main '$remote_addr [$time_local] ' '$host "$request_uri" $status "$request"' '"$http_referer" "$http_user_agent" "$request_time"'; 若不配置log_format或者不在access_log配置中指定log_format,则默认格式为: '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent";
一般的な変数
変数 | 説明 |
---|---|
$ time_local | ログ形式でユニバーサル現地時間;(サーバ時間) |
$ REMOTE_ADDR | クライアント(ユーザー)IPアドレス |
$状態 | 要求のステータスコード、など200404301302、等 |
$ body_bytes_sent | レスポンスのヘッダサイズを含まないクライアントに送信されたバイト数 |
$ BYTES_SENT | バイトの合計数は、クライアントに送信しました |
$ request_length | (要求ライン、要求ヘッダーとリクエストボディを含む)要求の長さ |
$ REQUEST_TIME | 要求は、小数点以下の形式で、時間を秒単位で処理します |
$ upstream_addr | クラスタポーリングアドレス |
$ upstream_response_time | 接続は、完全にデータの受信を開始した後、時間nginxの(PHP-CGI)から後方への接続を閉じ確立するための手段 |
$ REMOTE_USER | クライアントのユーザ名を記録するために使用 |
$リクエスト | モード要求(GETまたはPOSTなど)+ URL($ REQUEST_METHODを備え、$ホスト、$ REQUEST_URI) |
$ HTTP_USER_AGENT | ユーザーのブラウザを識別します |
$ HTTP_HOST | ホストのURLを要求されたアドレス(ターゲットアドレスURL) |
$ホスト | $ HTTP_HOSTに相当 |
$ HTTP_REFERER | あなたがリファラにアクセスするには、ブラウザに直接URLを入力すると、どのページからページへのソースページは、空であります |
$ sの | 現在のリクエストURIは、(リクエストパラメータなしパラメータは$引数である)、値は異なるが、内部リダイレクトすることインデックス命令を変更したり、使用することができる$ REQUEST_URIブラウザを、渡されました。 |
$ DOCUMENT_URI | $ URIに相当 |
$ REQUEST_URI | $ uriのより多くのパラメータであり、$ URI + $ argsを |
$ HTTP_X_FORWARDED_FOR | プロキシを使用する場合は、このパラメータは、プロキシサーバーとクライアントのIP IP記録します |