-准备环境
--1、版本下载
https://nginx.org/en/download.html
--2、安装
---2.1、安装依赖包
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y
---2.2、编译安装
tar -xf nginx-1.10.3.tar.gz
./configure --prefix=/usr/local/service/nginx --user=nginx-1.10.3 --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /usr/local/service/nginx /usr/local/service/nginx
---2.3、别名创建
echo "alias nginx='/usr/local/service/nginx/sbin/nginx'" >>/etc/bashrc
source /etc/bashrc
---2.4、配置文件检查
[root@test ~]# nginx -t
nginx: the configuration file /usr/local/service/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/service/nginx/conf/nginx.conf test is successful
---2.5、nginx -s signal
nginx -s signal
signal:
stop — fast shutdown
quit — graceful shutdown
reload — reloading the configuration file
reopen — reopening the log files
---2.6、检查基础配置文件
[root@test nginx]# grep -v "#" conf/nginx.conf|grep -v "^$"
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
---2.7、检查状态及进程
[root@test nginx]# curl -I http://127.0.0.1
[root@test logs]# ps -ax |grep nginx|grep -v grep
12097 ? Ss 0:00 nginx: master process /usr/local/service/nginx/sbin/nginx
19019 ? S 0:00 nginx: worker process
19020 ? S 0:00 nginx: worker process
---2.8、配置登录密码
yum install -y httpd-tools
/usr/local/apache/bin/htpasswd -c /data/nginx/conf/htpasswd biglittleant
New password:
---2.9、开启监控
location /status {
stub_status on; # 表示开启stubStatus的工作状态统计功能。
access_log off; # access_log off; 关闭access_log 日志记录功能。
#auth_basic "status"; # auth_basic 是nginx的一种认证机制。
#auth_basic_user_file conf/htpasswd;
}
---2.9、检查状态
[root@test nginx]# curl http://127.0.0.1/status
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
解析:
active connections:活跃的连接数量
server accepts handled requests:总共处理了2个连接 , 成功创建2次握手, 总共处理了2个请求
Reading:读取客户端的连接数:
Writing:响应数据到客户端的数量;
Waiting:开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 即 Nginx 已处理完正在等候下一次请求指令的驻留连接.
---2.10 编写nginx监控脚本
#!/bin/bash
#nginx_status_fun(){
NGINX_PORT=$1
NGINX_COMMAND=$2
nginx_active(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading() {
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
#}
---2.11 全局变量
$args:这个变量等于请求行中的参数,同$query_string。
$is_args: 如果已经设置$args,则该变量的值为"?",否则为""。
$content_length: 请求头中的Content-length字段。
$content_type: 请求头中的Content-Type字段。
$document_uri: 与$uri相同。
$document_root: 当前请求在root指令中指定的值。
$host: 请求主机头字段,否则为服务器名称。
$http_user_agent: 客户端agent信息。
$http_cookie: 客户端cookie信息。
$limit_rate: 这个变量可以限制连接速率。
$request_method: 客户端请求的动作,通常为GET或POST。
$remote_addr: 客户端的IP地址。
$remote_port: 客户端的端口。
$remote_user: 已经经过Auth Basic Module验证的用户名。
$request_body_file`: 客户端请求主体的临时文件名。
$request_uri: 请求的URI,带参数
$request_filename: 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme: 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;。
$server_protocol: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr: 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name: 服务器名称。
$server_port: 请求到达服务器的端口号。
$request_uri: 包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz,它无法修改。
$uri: 不带请求参数的当前URI,$uri不包含主机名,如/foo/bar.html可能和最初的值有不同,比如经过重定向之类的。它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。
访问链接是:http://localhost:88/test1/test.php
网站路径是:/var/www/html
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test.php
$document_uri:/test1/test.php
$document_root:/var/www/html
$request_filename:/var/www/html/test1/test.php
---2.12 内核优化
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120