手机版
你好,游客 登录 注册
背景:
阅读新闻

Nginx的几种常用配置

[日期:2017-01-31] 来源:Linux社区  作者:cct0513 [字体: ]

 

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。   

Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等新兴Web 2.0网站。

一、常见的502问题解决

  1. nginx虚拟主机网站的配置文件里的fastcgi_pass使用的socket和php-fpm.conf配置文件里监听的socket文件名不同。

  2. php-fpm的线程用完了

  3. 使用的socket文件的属主和属组和跑nginx线程的属主属组不同。

二、nginx用户认证

我们对www.test.com/admin.php做一个用户认证

vim /usr/local/nginx/conf/vhosts/test.conf   编辑虚拟主机的配置文件

更改内容如下:红色部分是增加的部分

server

{

    listen 80;

    server_name www.test.com;

    index index.html index.htm index.php;

    root /data/www;

    location ~ .*admin\.php$ {

    auth_basic "cct auth";

    auth_basic_user_file /usr/local/nginx/conf/.htpasswd;

    include fastcgi_params;

    fastcgi_pass unix:/tmp/www.sock;

   #fastcgi_pass 127.0.0.1:9000;

    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

}

htpasswd -c /usr/local/nginx/conf/.htpasswd cct   建立密码文件,指定用户名cct和密码

注意的是,htpasswd工具要先安装apache,yum install -y httpd

三、域名跳转

vim /usr/local/nginx/conf/vhosts/test.conf

加入以下内容

server_name www.test.com www.aaa.com www.bbb.com;   #设定多个域名

    if ($host != 'www.test.com')

    {

       rewrite ^/(.*)$ http://www.test.com/$1 permanent;     #跳转规则  跳转的规则

    } 

四、不记录指定文件类型日志

vim /usr/local/nginx/conf/nginx.conf 

log_format cct '$remote_addr $http_x_forwarded_for [$time_local]'  #红字部分可以自定义

    '$host "$request_uri" $status'

    '"$http_referer" "$http_user_agent"';

在/usr/local/nginx/conf/vhosts/test.conf里加入

access_log /tmp/nginx_access.log cct;   红字对应

下列加入虚拟主机配置文件里

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$     #限定.gif等文件的日志

    {

        access_log off;

    }  

    location ~ (static|cache)            #限定带有static和cache的日志

    {

         access_log off;

     } 

五、日志切割

和apache不同的是,nginx没有apache一样的工具做切割,需要编写脚本实现。

在/usr/local/sbin下写脚本

#!/bin/bash

dd=$(date -d '-1 day' +%F)

[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log

mv /tmp/nginx_access.log /tmp/nginx_log/$dd.log

/etc/init.d/nginx reload > /dev/null

六、配置静态文件过期时间

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

        access_log off;

        expires 15d;    #保存15天

    }

    location ~ \.(js|css)

    {

      access_log off;

      expires 2h;      #保存两个小时

    }

curl -x127.0.0.1:80 http://www.test.com/static/image/common/logo.png -I #测试图片的max-age

七、配置防盗链

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|bz2|gz)$

    {

        access_log off;

        expires 15d;

        valid_referers none blocked *.test.com *.aaa.com ;    #设置白名单

        if($invalid_referer)                        #其余的返回403

        {

           return 403;

         }

    }

curl -e "http://www.test.com/" -I -x127.0.0.1:80 'http://www.test.com/static/image/common/logo.png'  #返回200正常可以调用

curl -e "http://www.baidu.com/"  -I -x127.0.0.1:80 'http://www.test.com/static/image/common/logo.png'  返回403

curl -e指定referer时,要带上http://

八、nginx访问控制

可以设置一些配置禁止一些ip的访问

deny 127.0.0.1;     #全局定义限制,location里的是局部定义的。如果两者冲突,以location这种精确地优先,

location ~ .*admin\.php$ {

    #auth_basic "cct auth";

    #auth_basic_user_file /usr/local/nginx/conf/.htpasswd;

    allow 127.0.0.1;  只允许127.0.0.1的访问,其他均拒绝

    deny all;

    include fastcgi_params;

    fastcgi_pass unix:/tmp/www.sock;

    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;

    }

当定义了匹配对象的时候是优先匹配。 也就是越精准越优先。当没有定义匹配对象的时候,是从上到下逐条匹配。

九、禁止指定user_agent

虚拟主机的配置文件里加入:

  if ($http_user_agent ~* 'baidu|360|sohu')       #禁止useragent为baidu、360和sohu,~*表示不区分大小写匹配

    {

       return 403;

    }

location /  和  location  ~ /  优先级是不一样的。 

结合这个文章研究一下吧 http://blog.itpub.net/27181165/viewspace-777202/

curl -A "baidu" -x127.0.0.1:80 www.test.com/forum.php -I    该命令指定百度为user_agent,返回403

十、nginx代理

在vhosts目录下,vim proxy.conf

upstream cct{                    #自定义的

     server 111.13.100.91:80;       #对应www.baidu.com的两个ip地址

     server 111.13.100.92:80;

}

server{

    listen 80;

    server_name www.baidu.com;

    location / {

    proxy_pass http://cct/; #若只有一个IP地址,将cct替换成为IP地址,再将upstream模块去掉

    proxy_set_header Host $host;    #多个ip地址要把这一行加上,否则会出现502错误

    #proxy_set_header X-Real-IP $remote_addr;

    }

}

dig www.baidu.com 获得域名的多个IP地址

也可以用nginx做简单的负载均衡

CentOS 7.2下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1  http://www.linuxidc.com/Linux/2016-09/134804.htm

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx日志过滤 使用ngx_log_if不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx的500,502,504错误解决方法 http://www.linuxidc.com/Linux/2015-03/115507.htm

CentOS 7 编译安装Nginx1.10.2 脚本启动失败解决思路 http://www.linuxidc.com/Linux/2017-01/139794.htm

Nginx 的详细介绍请点这里
Nginx 的下载地址
请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-01/140070.htm 

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款