标签 nginx 下的文章

CentOS安装GeoIP

yum -y install nginx-module-geoip

yum 安装好后找到安装的模块文件
如果nginx是用yun安装的一般是安装到 /etc/nginx/modules/目录下

手动加入模块

在nginx.conf配置文件的头部载入模块和http是同一个级别的

load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";
ps: load_module 不能放在events{} 的后面,放在后面重启nginx会报错

因为GeoIP是基于MaxMind 提供了数据库文件来读取地域信息的所以需要下载ip的地域文件。
这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取,下面提供下载地址。
country.dat.gz
city.dat.gz
解压之后到nginx目录的geoip文件夹中,然后在项目的http中配置

geoip_country /etc/nginx/geoip/GeoIP.dat;  #加载国家IP
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; #加载城市IP

server中添加配置

#判断如果不是中国的就返回403;
if ($geoip_country_code != CN) {
    return 403;
}

这样就可以实现除中国以外的ip访问返回403.

一、描述
Ubuntu新搭建的lnmp环境测试环境是否正常,在网站根目录创建index.php,输出phpinfo,浏览器访问页面为空。

二、原因
原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析, 相当于php-fpm接收到了请求,但这请求却指向一个不存在的文件,于是返回空结果

三、解决
修改fastcgi_params

vim /etc/nginx/fastcgi_params

添加以下参数

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO       $fastcgi_script_name;

默认情况下contos7不带nginx的yum源
可以通过rpm添加yum源

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum源添加完成之后就可以使用yum安装nginx了(yum可以自行解决依赖关系安装nginx)

yum -y install nginx

安装完成之后可以通过命令启动nginx和设置开启自动运行

systemctl start nginx
systemctl enable nginx

没有任何报错就说明nginx安装并启动成功
如果有错误,可在nginx错误日志中查看原因

/var/log/nginx/error.log

server {
    listen  80;
    server_name  home.zhouqq.com;
    root /www/zhouqq;
    index  index.html index.htm index.php;
    error_page  404              /404.html;
    location = /404.html {
        return 404 'Sorry, File not Found!';
    }
    error_page  500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html; # windows用户替换这个目录
    }
    location / {
        try_files $uri @rewrite;
    }
    location @rewrite {
        set $static 0;
        if  ($uri ~ \.(css|js|jpg|jpeg|png|gif|ico|woff|eot|svg|css\.map|min\.map)$) {
            set $static 1;
        }
        if ($static = 0) {
            rewrite ^/(.*)$ /index.php?s=/$1;
        }
    }
    location ~ /Uploads/.*\.php$ {
        deny all;
    }
    location ~ \.php/ {
       if ($request_uri ~ ^(.+\.php)(/.+?)($|\?)) { }
       fastcgi_pass 127.0.0.1:9000;
       include fastcgi_params;
       fastcgi_param SCRIPT_NAME     $1;
       fastcgi_param PATH_INFO       $2;
       fastcgi_param SCRIPT_FILENAME $document_root$1;
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.ht {
        deny  all;
    }
}

问题描述:

公司一台服务器硬盘被nginx日志撑满,于是 rm -f 删除占硬盘的log文件,那么问题来了,log文件消失了,但是 df -h 显示磁盘空间未释放;

找其原因:

在linux中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink),然而如果文件是被打开的(有进程正在使用或者不断写入),那么进程将可以继续读取该文件,磁盘空间也会一直被占用无法释放,而我删除的nginx日志文件在删除的时候文件正在被使用;

解决办法:

1、需要清理日志等会不断写入的文件时,不要用rm删除文件,用 echo " " > ./error.log 清空日志文件,
2、如以上问题已出现,重启nginx服务。