Posted on

nginx中日志log配置与logrotate

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

sudo vim /etc/logrotate.d/nginx

 

/var/log/nginx/*.log {
monthly
missingok
rotate 14
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}

 

Posted on

ubuntu中php7.0使用curl

sudo apt-get install php7.0-curl

在php中使用curl:

$url = "https://123.456.789.666:4001/login";
$header = array('Content-Type: application/json');
$data='{"password":"123456"}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
//打印獲得的數據
$output = json_decode($output);
var_dump($httpCode);
print_r($output->token);

Posted on

ubuntu开机启动

rc.local脚本是一个Ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令。该脚本位于/etc/路径下,需要root权限才能修改。

注意: 一定要将命令添加在exit 0之前。里面可以直接写命令或者执行Shell脚本文件sh。

sudo vim /etc/rc.local

directive >/home/log.txt 2>&1 & //最后加&表示后台运行
node app.js >/log.txt 2>&1 & 

exit 0

Posted on

ubuntu中crontab定时任务

*/5 * * * * php 5minScript.php >> 5minScript.txt //每5分钟运行一次,输出到5minScript.txt文件
0 1,13 * * * php 12hourScript.php >> 12hourScript.txt //每天1点和13点运行一次
11 0 1 * * php monthScript.php >> monthScript.txt //每月1日0:11运行一次

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

crontab -e //编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

crontab  -l//显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

crontab的文件格式

分 时 日 月 星期 要运行的命令

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令

6 0 1 * * sudo reboot //每月1日0:06重启

编辑sudo不用输入密码:

sudo vim /etc/sudoers

输入:your_user_name ALL=(ALL) NOPASSWD: ALL //设置用户名

再输入:%sudo ALL=(ALL) NOPASSWD: ALL //设置用户组

Posted on

centos7下安装lemp栈

1.nginx

sudo yum install epel-release/更新的社区软件包
sudo yum install nginx
sudo systemctl start nginx/运行nginx
sudo systemctl enable nginx/开机启动
sudo yum update

2.mysql

sudo yum install http://repo.mysql.com/yum/mysql-5.5-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm/加入软件源
sudo yum repolist all | grep mysql/查看默认安装版本
sudo vim /etc/yum.repos.d/mysql-community.repo/修改默认安装版本
sudo yum install mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo mysql_secure_installation
mysql -u root -p

3.php

sudo yum install php php-mysql php-fpm
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php.ini
sudo sed -i 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf
sudo vim /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock/修改的行

4.phpmyadmin

sudo yum install phpmyadmin
sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html //把phpmyadmin目录链接到公开的web目录

5.nginx server blocks

sudo vim /etc/nginx/conf.d/default.conf

sudo vim /etc/nginx/nginx.conf

example:

server {
    listen       80;
    server_name  server_domain_name_or_IP;

    # note that these lines are originally from the "location /" block
    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

6.mysql导入导出

导入:

mysql -u root -p

create database 数据库名;

use 数据库名

source /root/数据库名.sql

导出:
mysqldump -u root -p 数据库名 > 文件名.sql
Posted on

php与python的比较

本文仅从需求端比较php与python这2种语言,而不会比较语法、效率、工程等具体的因素,因为这些都是IT业内的看法,而我们的软件不仅要卖给IT业内,最大的市场显然是不懂IT的公司和个人。

php一直在程序员界背负着“最好的语言”名声,这句调侃代表了程序员界的价值观:对非业内人士的贬低,因为我会c/c++/python/c#/java,所以比你只会php显得高级和专业。毕竟php太容易入门了,它在工商业界的应用太过广泛,但是在IT界却被贴上了许多负面标签:设计不好、效率不高、语法奇葩。事实许多公司的业务最简单的解决方案就是PHP,而且PHP开发的开源和商业软件也最丰富。

python虽然在程序员界被吹上了天,因为它既是最好的入门语言,可以写web后端,还可以写机器学习,又能数据分析,而且和大数据沾点边,把这些特点加起来不就是近年来IT界的所有热点吗?但是回过头来看看,用python写的最著名的网站都是IT业内的,其实python这么火爆,完全是被IT界的高薪吸引而想进入互联网公司的门外汉炒起来的。

工具毕竟是工具,有太多人痴迷于工具而忘记了前方的路该怎么走,其实顾客只是想把钉子订入墙内,而IT业内的程序员们太过执迷于使用哪把锤子,忘记了把钉子弄好。

 

Posted on

使用cloudflare屏蔽特定国家的ip

业务需要服务器屏蔽一个国家的ip访问,效率最高的是总是用nginx来实现。

首先重新编译nginx,加上ngx_http_geoip_module这个插件。

然后下一步网上全是下载geoip这个包来判断ip所属国家,这个教程我们换一种思路。

如果使用cloudflare加速的网站,默认会开启IP Geolocation这个选项(在network里可以找到),

它发送一个访问者的国家代码参数$HTTP_CF_IPCOUNTRY到nginx,这样我们就可以直接根据这个参数来屏蔽ip了。

location / {
if ($http_cf_ipcountry = CN) {
return 404;
}
}

国家代码参见:https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

此外还可以加上白名单功能

location / {

if ($ip_whitelist = 1) {
break;
}
if ($http_cf_ipcountry = CN) {
return 404;
}
}

编辑nginx.conf

http {
geo $http_cf_connecting_ip $ip_whitelist {
default 0;
8.8.8.8 1;
}
}

Posted on

vue上手记录

以前说起web前端开发,首先想到的是html+css+js,后来有了jQuery和bootstrap这样的傻瓜式工具,再后来兴起vue和React这样的框架,感觉前端发展太过迅速,不学习已经跟不上脚步了。

近几年移动端崛起,桌面端不断弱化,除了双端原生APP开发,跨端的技术就看前端怎么发展了。html5目前看来已经凉了大半,微信小程序和小游戏异军突起,vue和React这样的开源框架究竟能不能一统江湖,就要看主导厂家构建的生态系统了。

看一个技术能不能长久发展,有没有前途,最重要的还要看其市场大小和上手难度,比如js构建下的全栈技术生态是目前最热门的技术,另外热门的技术都是多面手,python在后端开发、机器学习、数据科学都有应用。

vue十分简单,如果有基本的js知识,十分容易上手。

但是必须学习许多新概念,比如渐进式、渲染、组件、vuex、node、npm、vue-cli、webpack等等,这些东西或者是vue自己创造的词,或者是其它前端工具使用的工具,对于我这个只会用前端三语言加一个记事本做开发的人来说,还是不小的挑战。

Posted on

php爬虫采集填坑

大多数早期的个人站长应该都听说过火车头采集器这款软件吧?当年做个人网站和seo的风潮正兴,但是没有内容是个大问题,而且个人站长主要专注于运营,对技术关注度不高,于是火车头这类傻瓜式的采集软件才会兴起。

现在各类编程语言都可以写爬虫来采集内容入库,好处是定制化程度、效率和灵活度比较高。这次用php来采集,主要使用了snoopy这个类、preg函数和正则表达式。

1.出现乱码问题,使用mb_convert_encoding转换为utf-8

2.snoopy类的用法,

include "Snoopy/Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->fetch("http://url");
$out = $snoopy->results;

3.正则表达式

推荐《正规表达式必知必会》

Posted on

卫星天线方位角、仰角、极化角的javascript算法实现

var Radian=Angle*(Math.PI/180);     //角度转换为弧度

var Angle=Radian*(180/Math.PI);    //弧度转换为角度

double x = atan(tan(LongitudeOfSatellite - LongitudeOfReceivStation) / sin(LatitudeForReceivStation));
x=180 - RadianToAngle(x) ; //方位角

double a = cos(LongitudeOfSatellite - LongitudeOfReceivStation) * cos(LatitudeForReceivStation);
double b = 1.0f - powf(a, 2.0f);
b=sqrt(b);
a=a - 0.1512695;
double x =(a / b);
x=atan(x);
x=RadianToAngle(x); //仰角

double x = atan(sin(LongitudeOfSatellite - LongitudeOfReceivStation) / tan(LatitudeForReceivStation));
x=RadianToAngle(x); //极化角,逆时针为负