阿里云CentOS主机 LNMP 环境配置之Nginx篇
上一篇文章主要分享了LNMP 环境如何简单配置 Mysql。这篇文章简要说说如何配置 Nginx 。是其默认配置文件是nginx.conf
和default.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 »