nginx安装及配置全攻略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nginx安装及配置全攻略
本篇主要介绍了nginx的安装,配置,反向代理,负载均衡等内容;
本文档已在CentOS_6.x、RedHat Enterprise Linux_6.x上测试过,完全通过;
所需源码包:pcre-8.35.gz、nginx-1.7.0.tar.gz(本实验是用的这个版本,也可以是其它版本)。
安装前的准备:
1、首先禁用掉防火墙、SELinux
2、挂载系统镜像光盘到/mnt目录;并配置好本地yum源(解决依赖包关系);
3、安装所需环境包:
#yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre-devel
4、创建nginx系统用户及用户组:
#groupadd -r nginx
#useradd -s /sbin/nologin -g nginx -r nginx
说明:因为我们要让nginx用户区运行程序,为了安全起见,所以把nginx用户设置为没有可交互式的shell,并创建为系统用户(没有家目录)。
一、安装nrpe
说明:为什么要先安装这个包呢?因为,这个包是为了支持nginx的重写模块,所以要先安装这个包,否则在编译nginx源码包时会报错。
#tar -zxvf pcre-8.35.gz
#cd pcre-8.35
# ./configure
#make && make install
安装完成后就可以安装nginx了!
二、安装nginx
#tar -zxvf nginx-1.7.0.tar.gz
# ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --pid-path=/var/run/nginx/nginx.pid --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
--http-client-body-temp-path=/var/tmp/nginx/client
#make && make install
提示:如果编译完显示最后显示出一下内容,说明无误,可以安装:
nginx path prefix: "/usr"
nginx binary file: "/usr/sbin/nginx"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/tmp/nginx/client"
nginx http proxy temporary files: "/var/tmp/nginx/proxy"
nginx http fastcgi temporary files: "/var/tmp/nginx/fcgi"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
安装完成后,在启动服务前先把原有的HTTP服务关掉
# /usr/sbin/nginx -c /etc/nginx/nginx.conf(启动服务)
附加:我们为了方便以后重启服务,重新加载配置文件等操作,自己添加一个nginx服务启动脚本到/etc/init.d/目录下面,脚本如下:
# vim /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx/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/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/nginx.lock
make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
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
sleep 1
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
保存退出!
要给这个脚本执行权限:
#chmod a+x /etc/init.d/nginx
#chkconfig --add nginx(把nginx加入列表)
#chkconfig nginx on(开机自启动)
#service nginx (start|stop|restart|reload) 以后就可以使用这样的命令来启动服务
提示:如果脚本启动不开来,就要检测这个脚本,看看脚本上的一些nginx配置文件的路径是否正确,如果不正确就要改成你在编译时自定义的那个路径。
启动完服务并成功后,在浏览器里输入:http://localhost
会出现一个welcome to nginx的欢迎页面,至此,说明nginx安装成功。
三、nginx配置
#vim /etc/nginx/nginx.conf(打开配置文件)
2#user nobody;
3 worker_processes 1;
4
5 #error_log logs/error.log;
6 #error_log logs/error.log notice;
7 #error_log logs/error.log info;
8
9 #pid logs/nginx.pid;
10
11
12 events {
13 worker_connections 1024;
14 }
http {
18 include mime.types;
19 default_type application/octet-stream;
20
21 #log_format main '$remote_addr - $remote_user [$time_local]
"$request" '
22 # '$status $body_bytes_sent "$http_referer" '
23 # '"$http_user_agent" "$http_x_forwarded_for"';
24
25 #access_log logs/access.log main;
26
27 sendfile on;
28 #tcp_nopush on;
29
30 #keepalive_timeout 0;
31 keepalive_timeout 65;
32
33 #gzip on;
34
35 server {
36 listen 80;
37 server_name localhost;
38
39 #charset koi8-r;
40
41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm;
46 }
打开后,我们可以清楚地看到大致分为三大部分,第一部分就是前10行,一些配置文件的说明及运行用户;
我们这部分主要讲的就是worker_processes 1;这个选项
worker_processes定义了nginx对外提供web服务时的worker进程数。
最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。
不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。
一般呢,还会再加一个参数:worker_rlimit_nofile 100000;
worker_rlimit_nofile 更改worker进程的最大打开文件数限制。
如果没设置的话,这个值为操作系统的限制。
设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。
一般主要就是这两个参数的配置就行了;
下面我们看第二部分,也就是events{}部分,如下:
events {
worker_connections 1024;
}
这边就稍微有点复杂了,具体讲解如下:
worker_connections 设置可由一个worker进程同时打开的最大连接数。
如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
默认下就这个一个配置选项,但我们为了满足需求,一般还再加两个选项,如下:use epoll; multi_accept on;
multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。
use 设置用于复用客户端线程的轮询方法。
如果你使用Linux 2.6+,你应该使用epoll。
如果你使用*BSD,你应该使用kqueue。
(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)
附加:Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过use指令指定。
∙select - 标准方法。
如果当前平台没有更有效的方法,它是编译时默认的方法。
你可以使用配置参数--with-select_module和--without-select_module来启用或禁用这个模块。
∙poll - 标准方法。
如果当前平台没有更有效的方法,它是编译时默认的方法。
你可以使用配置参数--with-poll_module和--without-poll_module来启用或禁用这个模块。
∙kqueue - 高效的方法,使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和MacOS X. 使用双处理器的MacOSX系统使用kqueue可能会造成内核崩溃。
epoll - 高效的方法,使用于Linux内核2.6版本及以后的系统。
在某些发行版本中,如SuSE8.2, 有让2.4版本的内核支持epoll的补丁。
下面看HTTP的部分,也就是第三部分,这里才是重点:
首先呢,我们可以看到这部分的结构大致如下:
http {
server {
location / {
}
}
}
大概就是这样,在第一个(最外面的花括号)花括号里面的是一些全局的配置,然后server 里面就是定义主机的(可以定义多个),location里面就是定义一些规则的
在讲解详细的配置前,我们先熟悉一下配置规则,如下:
1、语法规则: location [=|~|~*|^~] /uri/ { … }
= 表示精确匹配,不会去匹配子目录下的文件
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
^~ 表示不做正则表达式匹配
/ 表示通用匹配,任何请求都会匹配到
2、语法规则:root PATH (可以用在http、server、location中)
root用来指定网站的根目录
3、语法规则:index index.html index.htm; #指定主页文件
autoindex on; #索引功能打开,当没有找到定义的主页文件时,就会把网站跟目录下的文件都列出来
4、语法规则:alias file-path|directory-path
alias的普通用法:
location /alias/test.html {
alias /web/alias/test.html;
}
使用正则表达式的alias:
location ~ ^/test/(.*)$ {
alias /var/nginx/test/$1;
}
如果root在/var/www/html下,而访问http://domain/alias/test.html这个目录时,就会访问web下alias/test.html
root和alias的区别:
root指定的目录就是location后面的“/”,而alias指定的目录需要包括location后面的路径,如上面的例子。
下面就给大家通过一些简单的例子来讲解怎么定义虚拟主机,反向代理,负载均衡:
HTTP模块控制着nginx http处理的所有核心特性。
因为这里只有很少的配置,所以我们只节选配置的一小部分。
所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。
1.http {
2.server_tokens off;
3.sendfile on;
4.tcp_nopush on;
5.tcp_nodelay on;
6....
7.}
server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
sendfile 可以让sendfile()发挥作用。
sendfile()可以在磁盘和TCP socket之间互相拷
贝数据(或任意两个文件描述符)。
Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。
之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。
sendfile()是立即将数据从磁盘读到OS缓存。
因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。
tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
access_log 设置nginx是否将存储访问日志。
关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)
error_log 告诉nginx只能记录严重的错误:
keepalive_timeout给客户端分配keep-alive链接超时时间。
服务器将在这个超时时间
过后关闭链接。
我们将它设置低些可以让ngnix持续工作的时间更长。
client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。
我们也可以把这个设置低些。
reset_timeout_connection 告诉nginx关闭不响应的客户端连接。
这将会释放那个客户端所占有的内存空间。
se nd_timeout 指定客户端的响应超时时间。
这个设置不会用于整个转发器,而是在两次客户端读取操作之间。
如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
limit_conn_zone 设置用于保存各种key(比如当前连接数)的共享内存的参数。
5m就是5
兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。
limit_conn 为给定的key设置最大连接数。
这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。
include只是一个在当前文件中包含另一个文件内容的指令。
这里我们使用它来加载稍后会用到的一系列的MIME类型。
default_type 设置文件使用的默认的MIME-type。
charset 设置我们的头文件中的默认的字符集
gzip是告诉nginx采用gzip压缩的形式发送数据。
这将会减少我们发送的数据量。
gzip_disable 为指定的客户端禁用gzip功能。
我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。
gzip_static告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。
这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx 就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。
gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。
我们设置为any,意味着将会压缩所有的请求。
gzip_min_length设置对数据启用压缩的最少字节数。
如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
gzip_comp_level 设置数据的压缩等级。
这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。
我们设置为4,这是一个比较折中的设置。
gzip_type设置需要压缩的数据格式。
上面例子中已经有一些了,你也可以再添加更多的格式。
open_file_cache打开缓存的同时也指定了缓存最大数目,以及缓存的时间。
我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。
open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。
open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。
我们也包括了服务器模块,这些是在不同文件中定义的。
如果你的服务器模块
不在这些位置,你就得修改这一行来指定正确的位置。
下面给出一个HTTP部分的完整配置:
1.http {
2.server_tokens off;
3.sendfile on;
4.tcp_nopush on;
5.tcp_nodelay on;
6.access_log off;
7.error_log /var/log/nginx/error.log crit;
8.keepalive_timeout 10;
9.client_header_timeout 10;
10.client_body_timeout 10;
11.reset_timedout_connection on;
12.send_timeout 10;
13.limit_conn_zone $binary_remote_addr zone=addr:5m;
14.limit_conn addr 100;
15.include /etc/nginx/mime.types;
16.default_type text/html;
17.charset UTF-8;
18.gzip on;
19.gzip_disable "msie6";
20.gzip_proxied any;
21.gzip_min_length 1000;
22.gzip_comp_level 6;
23.gzip_types text/plain text/css application/json application/x-javascript
text/xml application/xml application/xml+rss text/javascript;
24.open_file_cache max=100000inactive=20s;
25.open_file_cache_valid 30s;
26.open_file_cache_min_uses 2;
27.open_file_cache_errors on;
28.include /etc/nginx/conf.d/*.conf;
29.include /etc/nginx/sites-enabled/*;
30.}
注意:这只是根据上面的讲解,列出的一个案例,具体还要根据自己需要去配置。
Nginx配置检测命令(出现下面两行内容,说明配置文件无误,否则有错,需重新配置)nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
基于用户认证的nginx监控
# htpasswd -m -c /etc/nginx/.htpasswd nginxadmin
# vim /etc/nginx/nginx.conf
location /nginx_status {
stub_status on; #打开监控功能
access_log off; #关闭日志(建议打开,方便出错时快速排错) auth_basic "who are you?"; #认证时的提示信息
auth_basic_user_file /etc/nginx/.htpasswd; #认证的文件
}
注意:在编译时需添加--with-http_stub_status_module这个模块,才可以开启监控
Active connections //当前 Nginx 正处理的活动连接数。
server accepts handledrequests //总共处理了8 个连接 , 成功创建 8 次握手,总共处理了500个请求。
Reading //nginx 读取到客户端的 Header 信息数。
Writing //nginx 返回给客户端的 Header 信息数。
Waiting //开启 keep-alive 的情况下,这个值等于 active – (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
定义虚拟主机
server {
listen 80 default;
server_name ;
location / {
root /var/nginx/test;
index index.html;
}
}
server {
listen 80;
server_name ;
location / {
root /var/www/html;
index index.html index.htm;
}
}
#定义了2个虚拟主机,上面一个是默认虚拟主机(也可以不设置为默认,看情况而定)
基于主机的访问控制
allow [ address | CIDR | all ]
deny [ address | CIDR | all ]
例子:
location / {
root /var/www/html;
index index.html index.htm;
allow 192.168.2.0/24;
deny all;
}
nginx 的session 保持:
使用nginx sticky 模块实现基于cookie 的负载均衡
即一个ip 一次始终就访问一个tomcat 服务器,(当用户注册账户时,第一个注册页注册完成,执行下一步时即切换页面,不会切到另一台tomcat 服务器),另外一个ip 访问下一台tomcat 服务器
1 2 3 4 #nginx -s stop //给nginx 添加模块徐重新编译,先stop
#tar zxf nginx-sticky-module-1.1.tar.gz #cd nginx-1.4.2
#make clean
#./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module
--with-http_stub_status_module --add-module=/root/nginx-sticky-module-1.1 #make && make install
#vim nginx.conf //配置文件中加入sticky 模块
upstream exmp {
sticky;
server 192.168.1.25:8080;
server 192.168.1.26:8080;
}
#nginx //启动nginx ,就可以发现一个ip 每次在有效时间内始终访问一台tomcat 服务器
https 加密web 访问
1 2 3 cd /etc/pki/tls/certs
make cert.pem //密钥和密文均在此文件
cp cert.pem /usr/local/lnmp/nginx/conf
1 vim nginx.conf //将HTTPS server 段打开,即去掉#
2 3 ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
负载均衡
upstream example {
server weight=5 down [backup];
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
weight 设定权重,默认为1
max_fails 在fail_timeout 指令设定的时间内发往此server 的不成功的请求次数,达到此数目后,此服务器将变为不可操作状态;默认值为1;设定为0值则禁用此功能; fail_timeout 默认为10秒;
down 列表中有这个服务器,但是不启用它
backup 当其他负载均衡的服务器都挂了,才会启用backup
想让那个server 实现负载均衡,就修改其server{}内的语句
1 2 3 4 5 6 7 8 server {
listen 80;
server_name ;
# access_log logs/.access.log main;
location / {
proxy_pass http://example
}
}
#反向代理
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
levels 指定该缓存空间有两层hash 目录,第一层目录为1个字母,第二层为2个字母 keys_zone=STATIC:1m 参数用来为这个缓存区起名(proxy_cache 指令需要用到其后对应缓存区名称),:1m 指内存缓存空间大小为1MB
inactive=24h 指如果缓存数据在24小时(天:d 、秒:s 、分:m )内没有被访问,将自动被删除
max_size=1g 指硬盘缓存大小为1g
提示:上面这句话要加在HTTP 部分;
server {
listen 80;
server_name ;
location / {
proxy_pass http://10.20.10.224;
proxy_set_header Real-ip $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_redirect off;
proxy_cache STATIC;
proxy_cache_valid 200 1d; #对响应码为200的文件,指定缓存失效的检查时间
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k;#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://10.10.10.140:8080;
}
#请求的jsp页面交给http://10.10.10.140:8080;这台服务处理}
#缓存图片
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#缓存js/css相关信息
location ~ .*\.(js|css)?$
{
expires 1h;
}
#为某个特定路径限速
server {
server_name ;
location /downloads/ {
limit_rate 256k;
limit_rate_after 20m;
root /var/www/html;
}
}
#限制搜索引擎的速度
if ($http_user_agent ~ Google|Yahoo|MSN|baidu) {
limit_rate 128k;
}
limit_rate_after 20m表示下载的前20M不做限速
limit_rate限制速度为256K/s
#简单的防盗链配置:
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked ;
if ($invalid_referer) {
rewrite ^/ /403.html;
# return 404
}
}
#URL重写
语法规则: rewrite regex replacement flag
flag的种类:
last 把当前的重写指令执行结束,并且重新启动匹配进程,一般都是用last
break 中止Rewirte,不在继续匹配
redirect 返回临时重定向的HTTP状态302
permanent 返回永久重定向的HTTP状态301
统一资源定位符(URL)和统一资源标识符(URI):
/nginx/a.html,对于这个地址,可以理解为这个地址就是一个URL,/nignx/a.html就是URI。
就相当于一个绝对路径,一个相对路径。
例子:
/maria.php?id=123 #用户请求的地址
/123/maria #重写后的地址
rewrite ^/(maria)\.php\?id=(.*)$ /$2/$1 last; #书写方法,前面匹配的就是URI
#实现域名跳转
server
{
listen 80;
server_name ;
index index.html index.php;
root /var/www/html;
rewrite ^/ /;
}
#NGINX下如何自定义404页面
IIS和APACHE下自定义404页面的经验介绍文章已经非常多了,NGINX的目前还比较少,为了解决自家的问题特地对此作了深入的研究。
研究结果表明,
NGINX下配置自定义的404页面是可行的,而且很简单,只需如下几步:
1.创建自己的404.html页面
2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on;
3.更改nginx.conf(或单独网站配置文件,例如在nginx -> sites-enabled下的站点配置文件)
中在server 区域加入:error_page 404 /404.html 或者error_page 404 =/404.html
4.更改后重启nginx,,测试nginx.conf正确性: /opt/nginx/sbin/nginx –t
#502 等错误可以用同样的方法来配置。
error_page 500 502 503 504 /50x.html;
#日志管理
语法规则: log_format name format
Ⅰ、设定错误日志格式及级别:
http {
log_format my_log_fm '$http_x_forwarded_for - $remote_user [$time_local]' '"$request" $status $body_bytes_sent'
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log my_log_fm;
error_log /var/log/nginx/error.log warn;
}
$http_x_forwarded_for和$remote_user用于记录客户端网关的IP地址和用户
$time_local用于记录访问时间和时区
$request用于记录请求的URL和http协议
$status用于记录请求的状态,例如请求成功时状态码为200
$body_bytes_sent用于记录发送给客户端文件主体的内容大小
$http_referer用户记录请求是从哪个页面连接访问过来的
$http_user_agent用户记录客户端浏览器的相关信息
记录类似apache格式的日志:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
#日志切割
#!/bin/bash
#
logs_path="/var/log/nginx/"
#当前日志的存放目录
mkdir -p ${logs_path}$(date -d"yesterday" +"%Y")/$(date -d"yesterday" +"%m") #在上面的目录下,给日志创建以时间命名的目录
mv ${logs_path}aa.access.log ${logs_path}$(date -d"yesterday" +"%Y")/$(date -d"yesterday" +"%m")/$(date -d"yesterday" +"%Y%m%d").log
#移动日志到日期命名的目录中
添加到任务计划,定时执行
# crontab -e
00 00 * * * /root/log_switch.sh
重启服务
#service nginx reload
#service crond start
#chkconfig crond on。