阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx的几种常用配置

215次阅读
没有评论

共计 4532 个字符,预计需要花费 12 分钟才能阅读完成。

 

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 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4532字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中