如果你只是简单的搭建一个博客,搭建PHP运行环境,配置简单的nginx,那么本文就是你的菜。简单的介绍nginx的基本配置,并系统大概介绍nginx的配置项。
简介
Nginx是一个轻量级高性能的web服务器,它是为快速响应大量静态文件请求和高效利用系统资源而设计的。相比于Apache,nginx使用异步事件驱动模型在负载下性能更突出,而且占用资源相对较少,nginx能高效地服务静态文件,而动态内容会转发给 fast-cgi 模块。
Nginx使用嵌套的花括号语法来定义选项。安装完成后nginx的主配置文件被放在/usr/local/nginx/nginx.conf,同时一个默认的备份配置文件存在/usr/local/nginx/nginx.conf.default。如果你是使用系统默认的 yum 或则 apt-get 安装,也有可能在 /etc/nginx/目录下。其它子配置文件同样有一个.default结尾的备份配置文件,.default的作用是当你修改配置文件错误的时候,你可以快速回到上一个好用的状态。建议大家经常对配置好的功能的配置文件做备份。
# 备份当前的配置文件 cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak # 检测修改后的nginx.conf 配置是否正确 nginx -t # 重新加载配置文件有下面四种办法 nginx -s reload kill -HUP `cat /etc/nginx/nginx/nginx.pid` service nginx restart /etc/init.d/nginx restart
配置规则
全局配置位于nginx.conf文件的开头,包含nginx的运行基本配置,也是后面的站点所共有的配置。下面说明配置的基本语法。
- #号开的行是注释,nginx不会解析
- 每条配置项以一个变量名开头
- 每条配置项以分号结束
- 某些配置项可以包含子配置,这些子配置使用花括号包含,如servers.
- nginx解析或忽略空白符(空格,tab,换行),建议使用良好的缩进组织各个模块
基本配置
基本配置位于nginx.conf文件的开头,用于指定nginx运行时的一些基本信息。
# Nginx用户名和用户组 user nginx nginx; # 工作进程,根据硬件调整,通常等于CPU数量或者2倍于CPU。 worker_processes auto; # 错误日志级别和路径 error_log /var/log/nginx/error.log; error_log /var/log/nginx/error.log notice; error_log /var/log/nginx/error.log info; # 进程标识存放路径 pid /var/run/nginx.pid; # 加载动态模块,包括一些.so的动态库加载配置 # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf;
events模块配置
events模块主要对HTTP连接的基本属性进行设置。
events { worker_connections 1024; # 每个进程允许的最大连接数 }
HTTP模块配置
HTTP模块主要管理HTTP服务器的配置,如反向代理配置,站点配置,日志格式等。一般这一项配置不用怎么修改。
Server模块配置
Server模块主要配置虚拟主机,位于HTTP模块内,如果一台服务器要设置多个站点,这个配置就很有用啦!像日志文件地址这类共有的配置,如果在Server模块了没有定义,则使用外层HTTP模块定义的配置。Server模块一般包含多个Loacation模块,每个Loacation模块定义一种请求处理规则。
server{ listen 80; # 监听端口 server_name uusama.com; # 域名名称 access_log /var/log/nginx/uusama/access.log; # 访问日志路径,这个路径必须要存在 error_log /var/log/nginx/uusama/error.log; # 错误日志路径 root /var/www/uusama/wordpress; # 网站跟目录路径 index index.html index.htm index.php; # 主页文件 }
Location配置
每个Loacation定义一种请求匹配处理规则,以一个正则表达式开头,会匹配你的请求地址。
匹配规则
- ~ :执行一个正则匹配,区分大小写
- !~ :执行正则不匹配,区分大小写
- ~* :执行一个正则匹配,不区分大小写
- !~* :执行正则不匹配,不区分大小写
- ^~ :普通字符匹配,如果该选项匹配,只匹配该选项,一般用来匹配目录
- = :普通字符精确匹配
- / :通用匹配,任何请求都会匹配到
匹配优先级
- 首先精确匹配 = ,如果找到,停止搜索
- 所有剩下的常规字符串,最长的匹配,如果匹配^~,则停止搜索
- 按照配置文件的顺序进行正则匹配
- 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果
- 最后是交给/进行通用匹配
下面是我家网站的配置,可以参考一下。
# 通用匹配跳转到首页 location / { if (!-e request_filename) { rewrite . /index.php last; break; } } # 所有以包含.php的请求转发到fastcgi location ~ .*\.php(\/.*)* { try_files uri =404; setscript uri; setpath_info ""; if (uri ~ "^(.+\.php)(/.+)") { setscript 1; setpath_info 2; } #fastcgi_pass /var/run/php-fpm/php-fpm.pid; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; fastcgi_param PATH_INFOpath_info; fastcgi_param SCRIPT_FILENAME document_rootscript; fastcgi_param SCRIPT_NAME script; } # Static files. # Set expire headers, Turn off access log # 不区分大小写的匹配 location ~* \favicon.ico { access_log off; expires 1d; # 设置浏览器本地缓存时间 add_header Cache-Control public; } # 匹配目录 location ~ ^/(img|cjs|ccss)/ { access_log off; expires 7d; # 设置浏览器本地缓存时间 add_header Cache-Control public; } # Deny access to .htaccess files, # git & svn repositories, etc # 匹配.ht,.git,.svn后缀的文件 location ~ /(\.ht|\.git|\.svn) { deny all; # 禁止访问 }