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,可能和最初的值有不同,比如经过重定向之类的。