Junhc

岂止于博客

Nginx

安装篇
1.下载

官网下载nginx源码 download

2.解压
$ tar -zxvf nginx-1.9.4.tar.gz
3.准备编译配置文件
$ yum install -y pcre-devel openssl-devel
$ cd nginx-1.9.4 & ./configure
4.编译&安装
$ make & make install
5.为nginx提供脚本
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:     /usr/local/nginx/conf/nginx.conf
# pidfile:   /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
6.为脚本赋予执行权限
$ chmod +x /etc/init.d/nginx
7.添加服务列表&设置开机启动
$ chkconfig --add nginx
$ chkconfig nginx on
8.启动|停止|重启Nginx
$ service nginx start|stop|restart

#####指令篇

upstream指令

语法:upstream name {…}
默认值:none
使用环境:http
该指令用于设置一组可以proxy_pass和fastcgi_pass指令中使用的代理服务器,默认的负载均衡方式为轮询。示例代码如下:

upstream backend {
  server backend.example.com weight=5;
  server 127.0.0.1:8080 max_fails=3 fail_time=30s;
  server unix:/tmp/backend;
}
location指令

语法:location [=|~|~*|^~]/uri/ {…}
默认值:no
使用环境:server
该指令允许对不同的URI进行不同的配置,既可以使用字符串,也可以使用正则表达式。使用正则表达式,须使用以下前缀:
(1) ~*,表示不区分大小写的匹配。
(2) ~,表示区分大小写的匹配。
在匹配过程中,Nginx将首先匹配字符串,然后再匹配正则表达式。匹配到第一个正则表达式后,会停止搜索。如果匹配到正则表达式,则使用正则表达式的搜索结果,如果没有匹配到正则表达式,则使用字符串的搜索结果。
可以使用前缀”^~”来禁止匹配到字符串后,再去检查正则表达式。匹配到URI后,将停止停止查询。
使用前缀”=”可以进行精确的URI匹配,如果找到匹配的URI,则停止查询。例如”location =/”,只能匹配到”/”,而”/test.html”则不能匹配。
正则表达的匹配,按照它们再配置文件中的顺序进行,写在前面的优先。
示例代码如下:

location = / {
  # 仅仅匹配/
  [ configuration A ]
}

location / {
  # 匹配任何以/开头的查询,但是正则表达式及较长的字符串(例如/admin/)将被优先匹配。
  [ configuration B ]
}

location ^~ /imgages/ {
  # 匹配任何以/imgages/开头的字符串,并且停止搜索,所以正则表达式将不会被检查。
  [ configuration C ]
}

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配.gif、.jpg、.jpeg结尾的任何请求。但是,/images/内的请求使用configuration C的配置
  [ configuration D ]
}

另外,前缀”@”是一个命名标记,这种location不会用于正常的请求,它们通常只是用于处理内部的重定向(例如:error_page、try_files)
示例代码如下:

location ~ \.php$ {
  root /www/htdocs/;
  index index.php index.html index.htm;
  error_page 404 502 504 @fetch;
}

location @fetch {
  internal;
  proxy_pass: http://backend;
  break;
}
#变量名                    #简要说明

$args                      请求中的参数;
$binary_remote_addr        远程地址的二进制表示
$body_bytes_sent           已发送的消息体字节数
$content_length            HTTP请求信息里的"Content-Length";
$content_type              请求信息里的"Content-Type";
$document_root             针对当前请求的根路径设置值;
$document_uri			   与$uri相同;
$host                      请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$hostname      
$http_cookie               cookie 信息
$http_post     
$http_referer              引用地址
$http_user_agent           客户端代理信息
$http_via                  最后一个访问服务器的Ip地址。
$http_x_forwarded_for      相当于网络访问路径。
$is_args       
$limit_rate                对连接速率的限制;
$nginx_version     
$pid       
$query_string			   与$args相同;
$realpath_root     
$remote_addr               客户端地址;
$remote_port               客户端端口号;
$remote_user               客户端用户名,认证用;
$request                   用户请求
$request_body      
$request_body_file         发往后端的本地文件名称
$request_completion        
$request_filename          当前请求的文件路径名
$request_method            请求的方法,比如"GET""POST"等;
$request_uri               请求的URI,带参数;
$scheme					   所用的协议,比如http或者是https,比如rewrite^(.+)$$scheme://example.com$1redirect;
$sent_http_cache_control   1
$sent_http_connection  
$sent_http_content_length  
$sent_http_content_type    
$sent_http_keep_alive      
$sent_http_last_modified       
$sent_http_location        
$sent_http_transfer_encoding       
$server_addr               服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name               请求到达的服务器名;
$server_port               请求到达的服务器端口号;
$server_protocol           请求的协议版本,"HTTP/1.0""HTTP/1.1";
$uri                       请求的URI,可能和最初的值有不同,比如经过重定向之类的。