神奇的Nginx之常用设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神奇的Nginx之常用设置相关的知识,希望对你有一定的参考价值。

引言

nginx软件十分小巧,较其竞争对手Apache而言,nginx可以实现的功能更为丰富,配置更为简单。Nginx采用多线程方式,对服务器内存大小要求不像apache那些高,此外其处理静态网页的速率、并发的访问量方面等都要比apache出色的多。目前越来越多的国内公司都开始使用nginx来代替apache搭建网站架构。本文介绍了部分常用nginx配置(核心代码)。

默认虚拟主机

nginx可以实现配置文件的模块化分离,每个配置文件都是一个独立的虚拟主机。

[[email protected] default]# vim /usr/local/nginx/conf/vhost/test.com.conf 
server
{
    # 将该虚拟主机设置为默认虚拟主机
    listen 80 default_server;
    # 设置服务器的名称
    server_name default.com;
    # 设置服务器默认网页
    index index.html index.htm index.php;
    # 设置服务器的根目录
    root /data/www/default;
}

用户认证

  • 核心代码

    # 对目录
     location /admin
     {
         auth_basic "User Auth";
             auth_basic_user_file /usr/local/nginx/conf/htpasswd;
     }
   # 对文件,可以直接写文件名,也可以是正则表示
   # ~ 匹配,~*模糊匹配(忽略大小写)
    location ~ .*\.php$
    {
        auth_basic "User Auth";
            auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    }

域名重定向

实现老站点向新站点域名的重定向

server
{
    listen 80;
    # nginx可以配置多个主机名,apache只能使用ServerAlias来指定别名
    # nginx中哪个主机名在前,就是默认使用的主机名
    server_name test.com test2.com;
    index index.html index.htm index.php;
    root /data/www/test.com;
    # 判断host是否为test.com
        # permanent及返回状态码301,永久重定向
    if ($host != ‘test.com‘) {
    rewrite ^/(.*)$ http://test.com/$1 permanent;
    }
}

访问日志

# 在nginx主配置文件nginx.conf内添加一下代码即可
log_format test ‘$remote_addr $http_x_forwarded_for [$time_local]‘
    ‘ $host "$request_uri" $status‘
    ‘ "$http_referer" "$http_user_agent"‘;

        
# 设置好日志格式后,在虚拟主机内的server块内使用
access_log /tmp/test.com.log test;


# 如果某些情况下不需要记录日志,代码如下
access_log off;

静态文件不记录访问日志

对于nginx静态文件访问日志不记录设置而言十分简单,其核心代码即expires time;

# 对不同的文件设置不同的过期时间
# 过期时间单位可以是m/h/d等
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 7d;
    }
location ~ .*\.(css|js)$
    {
        expires 12h;
    }

防盗链

location ~* .*\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
    {
        # 白名单可以是多个域名,域名间使用空格间隔开
        valid_referers none blocked server_names *.test.com;
        # 条件判断,非白名单域名返回403状态码即禁止访问forbidden;
        if ($invalid_referer) {
            return 403;
        }
    }

访问控制

# 对于目录
location /admin/
{
    # nginx中没有apache里的order命令,按代码先后顺序执行
    # nginx中只要有一条规则匹配,后续规则就不会进行匹配
    # 允许本机
    allow 127.0.0.1;
    allow 192.168.65.133;
    # 禁止其他所有ip
    deny all;
}
# 针对文件
location ~ .*(upload|admin)/.*\.php$
{
    deny all;
}
# 针对user_agent
location / 
{
    if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato‘)
    {
        return 403; //等价于deny all;
    }
}

php文件解析

location ~ \.php$
    {
        include fastcgi_params;
            # fastcgi_pass参数可以使用ip、sock
            # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/tmp/php-fcgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/test.com$fastcgi_script_name;
    }

nginx还可以实现更多更有用的功能,这些知识点不是短短一篇博客就可以将去清楚的,本文基本上时nginx服务器基本功能实现的简单代码配置,日常生活工作中还是需要根据具体的需求还进行配置。

以上是关于神奇的Nginx之常用设置的主要内容,如果未能解决你的问题,请参考以下文章

56个PHP开发常用代码

web前端开发JQuery常用实例代码片段(50个)

常用的几个JQuery代码片段

深入Nginx之《常用参数配置技巧》

Nginx基础入门之fastcgi模块常用配置项说明

Nginx基础入门之fastcgi常用配置项说明