• 认真地记录技术中遇到的坑!

Nginx基本配置

web服务器 悠悠 2年前 (2017-08-11) 703次浏览 0个评论

如果你只是简单的搭建一个博客,搭建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的运行基本配置,也是后面的站点所共有的配置。下面说明配置的基本语法。

  1. #号开的行是注释,nginx不会解析
  2. 每条配置项以一个变量名开头
  3. 每条配置项以分号结束
  4. 某些配置项可以包含子配置,这些子配置使用花括号包含,如servers.
  5. 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服务器的配置,如反向代理配置,站点配置,日志格式等。一般这一项配置不用怎么修改。

http {
    # 日志格式配置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    # 用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径
    access_log  /var/log/nginx/access.log  main;
    # 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on
    sendfile            on;
    # 此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;   # 长连接超时时间
    types_hash_max_size 2048; # hash 类型的大小
    client_max_body_size 8M;  # 设定通过nginx上传文件的大小
    client_body_buffer_size 128k;  # 客户端缓冲大小
    include             /etc/nginx/mime.types; # 设定mime类型,类型由mime.type文件定义
    default_type        application/octet-stream; 

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;  # 包含其他的虚拟主机等配置
}

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定义一种请求匹配处理规则,以一个正则表达式开头,会匹配你的请求地址。

匹配规则

  1. ~      :执行一个正则匹配,区分大小写
  2. !~     :执行正则不匹配,区分大小写
  3. ~*     :执行一个正则匹配,不区分大小写
  4. !~*    :执行正则不匹配,不区分大小写
  5. ^~    :普通字符匹配,如果该选项匹配,只匹配该选项,一般用来匹配目录
  6. =       :普通字符精确匹配
  7. /        :通用匹配,任何请求都会匹配到

匹配优先级

  1. 首先精确匹配 = ,如果找到,停止搜索
  2. 所有剩下的常规字符串,最长的匹配,如果匹配^~,则停止搜索
  3. 按照配置文件的顺序进行正则匹配
  4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果
  5. 最后是交给/进行通用匹配

下面是我家网站的配置,可以参考一下。

# 通用匹配跳转到首页
    location / {
        if (!-e $request_filename) {
            rewrite . /index.php last;
            break;
        }
    }

    # 所有以包含.php的请求转发到fastcgi
    location ~ .*\.php(\/.*)*$ {
        try_files $uri =404;
        set  $script     $uri;
        set  $path_info  "";
        if ($uri ~ "^(.+\.php)(/.+)") {
                set  $script     $1;
                set  $path_info  $2;
            }

        #fastcgi_pass   /var/run/php-fpm/php-fpm.pid;
        fastcgi_pass 127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  PATH_INFO                $path_info;
        fastcgi_param  SCRIPT_FILENAME          $document_root$script;
        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; # 禁止访问
    }

转载请注明出处 Nginx基本配置
喜欢 (3)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址