TypeCodes

阿里云CentOS主机 LNMP 环境配置之Nginx篇

上一篇文章主要分享了LNMP 环境如何简单配置 Mysql。这篇文章简要说说如何配置 Nginx 。是其默认配置文件是nginx.confdefault.conf

1 nginx.conf配置文件

在 nginx.conf 文件中,会看到 nginx 默认的错误日志保存文件:error.log。它记录了服务器端由nginx处理的错误信息,例如永久跳转301、页面不存在404错误、服务器错误500错误等等。

###### 错误日志文件error.log, 可重新定义路径
error_log  /var/log/nginx/error.log warn;

###### 客户端请求处理记录文件access.log, 可重新定义路径
access_log  /var/log/nginx/access.log

在 CentOS 系统中的很多配置文件都会用到“引用文件”,其效果就像C/C++或PHP等语言中的 include 文件预处理。在 nginx.conf 中定义的 http 属性中同样可以看到示例:

###### Multipurpose Internet Mail Extensions, 定义不同文件后缀对应的MIME类型
include  /etc/nginx/mime.types;

重点来了,如何为站点开启 Gzip 压缩呢?方法很简单,在 http 属性中添加

#support gzip
gzip on;

###### 压缩条件:页面最小字节数(从header头中的content-length获取)大于1K
gzip_min_length 1k;

gzip_buffers 16 64k;
gzip_http_version 1.1;

###### gzip压缩比例, 1到9, 9压缩比最大但处理速度最慢
gzip_comp_level 6;

###### 需要压缩的文件类型,  text/javascript是js压缩, 不要漏掉
gzip_types text/plain application/x-javascript text/css application/javascript text/javascript image/jpeg image/gif image/png application/xml application/json;

###### 浏览器支持,则开启 Gzip 压缩
gzip_vary on;

###### 去掉 IE6 以下系列浏览器的支持, 避免 nginx 出错
gzip_disable "MSIE [1-6].(?!.*SV1)";
2 default.conf配置文件

在 nginx.conf 中通过include /etc/nginx/conf.d/\*.conf;引入了 default.conf 这个server配置文件。它用来详细配置整个web站点的Server信息。下面是一个完整的 default.conf 配置文件示例,要点已注释。

server {
    ######  监听80端口
    listen       80;
    server_name  www.typecodes.com;

    #http  301 redirect
    if ( $host != 'www.typecodes.com' ) {
        rewrite ^/(.*)$ https://www.typecodes.com/$1 permanent;
    }

    #####  web站点的根路径, 大家可自定义
    root   /usr/wwwroot/typecho;
    index  index.php index.html;

    #####  css/javascript/图片等静态资源缓存的天数
    location ~ .*\.(css|js|ico|png|gif|jpg|json|mp3|mp4|flv|swf)(.*) {
        expires 60d;
    }

    #####  禁止执行某个目录下面的php脚本(此示例是针对wordpress/typecho的插件目录)
    location ~ .*/plugins/.*\.(php|php5|html)$ {
        deny  all;
    }

    #####  Rewrite的伪静态法则(针对wordpress/typecho)
    location / {
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
    }

    #####  redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    #####  依葫芦画瓢设置 http 403、404响应码的处理页面
    error_page  403 404              /40x.html;
    location = /40x.html {
        root   /usr/share/nginx/html;
    }

    #####  pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location  ~ .*\.php(\/.*)*$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #####  $document_root代表开头的 root 定义的web根路径
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    ###### 禁止访问某个重要文件(示例是禁止 .htxxx 文件), 记得举一反三
    location ~ /\.ht {
        deny  all;
    }
}
3关于网站空白页面如何显示404错误

上面配置的404页面,只能在访问服务器上不存在的静态资源(例如.html、js、css等)时,才会通过 40x.html 显示错误提示。当访问服务器上不存在的 .php 文件时,站点会显示空白页面,即设置的 40x.html 没生效。原因是在 nginx.conf 配置文件中的 http 属性没有设置fastcgi_intercept_errors on;导致的。其作用是当 FastCGI 后端服务器处理请求给出 http 响应码为 4xx 和 5xx 时,就转发给 nginx,由 default.conf 配置的 error_page 项来处理,最后响应给客户端。这样就将由于不存在的 .php 脚本文件出现的404错误也引导至 40x.html 页面处理了。

4关于网站如何显示服务器500等错误

原理一样,通过上面的设置,http状态码为500等错误时,也会引导至 50x.html 页面处理。最后请注意,在一个 http 中可以启动多个 server;在一个server中,可以有多个location配置,这样就有了Nginx多站点的配置(略去)。

打赏支持

Comments »