您的当前位置:首页正文

nginx安装及配置全攻略

来源:爱go旅游网
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关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。

send_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=100000 inactive=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 www.bb.com; location / {

root /var/nginx/test; index index.html; } } server {

listen 80;

server_name www.aa.com; 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 #nginx -s stop //给nginx添加模块徐重新编译,先stop 2 #tar zxf nginx-sticky-module-1.1.tar.gz 3 #cd nginx-1.4.2 4 #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 cd /etc/pki/tls/certs

2 make cert.pem //密钥和密文均在此文件 3 cp cert.pem /usr/local/lnmp/nginx/conf 1

vim nginx.conf //将HTTPS server段打开,即去掉#

2 ssl_certificate cert.pem; 3 ssl_certificate_key cert.pem;

负载均衡

upstream example {

server www.aa.com 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 server {

2 listen 80; 3 server_name www.ty.org;

4 # access_log logs/example.org.access.log main; 5 location / {

6 proxy_pass http://example 7 } 8 }

#反向代理

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 www.xxxxx.com;

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 www.aa.com;

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 www.aa.com; if ($invalid_referer) {

rewrite ^/ http://www.aa.com/403.html; # return 404 } }

#URL重写

语法规则: rewrite regex replacement flag flag的种类:

last 把当前的重写指令执行结束,并且重新启动匹配进程,一般都是用last break 中止Rewirte,不在继续匹配 redirect 返回临时重定向的HTTP状态302 permanent 返回永久重定向的HTTP状态301

统一资源定位符(URL)和统一资源标识符(URI):

www.aa.com/nginx/a.html,对于这个地址,可以理解为这个地址就是一个URL,/nignx/a.html就是URI。就相当于一个绝对路径,一个相对路径。

例子:

http://www.aa.com/maria.php?id=123 #用户请求的地址 http://www.aa.com/123/maria #重写后的地址 rewrite ^/(maria)\\.php\\?id=(.*)$ /$2/$1 last; #书写方法,前面匹配的就是URI

#实现域名跳转 server {

listen 80;

server_name jump.aa.com; index index.html index.php;

root /var/www/html;

rewrite ^/ http://www.aa.com/; }

#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 =http://www.xxx.com/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

因篇幅问题不能全部显示,请点此查看更多更全内容