nginx没有正确挂在php-fpm导致无法解析php(访问页面变成下载或者白屏)

昨天公司同事接受一个项目服务器,但是php站点死活打不开,表现为打开index.html后缀文件可以访问,打开php后缀文件会变成下载.
一开始怀疑的是文件头content-type没有正确设置,正确的文件头应该如下(人工手敲可能会敲成html/text),
`content-type: text/html; charset=utf-8`
但是检查过后发现是没问题的,于是开始分析,网站域名和端口能正确解析,证明nginx是有工作的,html文件能正确解析,但是php文件不能解析,就证明php服务是没有正确工作的,顾初步怀疑是php-fpm的问题,因php-fpm没有正确解析编译php导致访问.php文件后浏览器会变成下载.
一番折腾后,在nginx对应的虚拟站点配置文件中添加下如下配置即可
```shell

#当请求网站下php文件的时候,反向代理到php-fpm
location ~ .php$ {
include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000; #交由fastcgi(php-fpm)处理,nginx fastcgi进程监听的IP地址和端口
}
“`

meta加了缓存静态文件不生效

迫于网站首页打开缓慢,在头部加了缓存静态资源文件的代码,然而发现不生效

<meta http-equiv="Cache-Control" content="max-age=7200" />

打开控制台发现缓存状态为:

Cache-Control:no-store,no-cache,must-revalidate;

Pragma: no-cache;

初步怀疑是服务器配置问题,一番度娘后发现是php.ini配置的问题,打开配置文件

#找到
session.cache_limiter
#默认为nocache,修改为none

修改后重载配置,即可生效

参考链接:
1:http://www.zxsdw.com/index.php/archives/926/
2:https://blog.csdn.net/a624193873/article/details/103130043

php 7.2 安装 mcrypt 扩展: mcrypt 扩展从 php 7.1.0 开始废弃;自 php 7.2.0 起,会移到 pecl

升级 php 7.2 后,使用微信提供的加解密代码时,提示 call to undefined function mcrypt_module_open() ;大脑疯狂运转1秒钟后,得出结论:php 7.2的扩展有变动;查阅相关资料知晓,mcrypt 扩展从 php 7.1.0 开始废弃;自 php 7.2.0 起,会移到 pecl。还好,安装过程不复杂。

环境:centos 7

1.yum 安装依赖包:

yum install libmcrypt libmcrypt-devel mcrypt mhash

2.在 php 官网下载 mcrypt 包,php 扩展官网

# wget http://pecl.php.net/get/mcrypt-1.0.1.tgz

# tar xf mcrypt-1.0.1.tgz

# cd mcrypt-1.0.1

3.编译安装 mcrypt

进入到php安装目录

# /usr/local/php/bin/phpize

# ./configure –with-php-config=/usr/local/php/bin/php-config && make && make install

4.在php.ini加上扩展即可

extension=mcrypt.so

5.重启 php-fpm

/etc/init.d/php-fpm restart #可以根据实际情况修改,你也可能是/usr/local/php/sbin/php-fpm

Linux crontab curl突然运行没成功访问

今天,在执行crontab curl时,访问不成功了,问题是之前完全没有出现过这样的情况。
首先是排查crontab是否有执行
通过命令查看定时任务是否正常执行

service crond restart

执行结果显示是正常执行的,然后进一步查看日志
发现有报错提示
curl:(6) Could not resolve host: www.baidu,cim; Unknown error

上网了解了一下,都说是DNS的问题,因此修改一下DNS配置

[root@localhost ~]# vim /etc/resolv.conf

// 原先的DNS
# Generated by NetworkManager
nameserver 8.8.8.8

// 修改后的DNS
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8

结果只是加上了nameserver 114.114.114.114就可以了,网上了解到的可能是电信DNS有调整的缘故,但是具体的原因还是不得而知。

Linux中空间不足的解决办法

在Linux的使用过程中,如果/var单独分区,但是指定的空间不大,在更新系统或者安装大型软件(如搭建Discourse论坛平台)的时候,使用到了该目录。或开启了cron定时任务时/var/spool/clientmqueue里会不停收集错误信息,长年累积下来动辄就有几十个G的空间,就可能导致提示空间不足的情况本文介绍部分解决办法。

使用软链接指向富足的空间区块

首先了解下Linux链接的概念。
链接是为某一个文件在另外一个位置建立一个不同的链接,分为硬链接和软链接。

Linux软链接:它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,命令:ln -s xxx
Linux硬链接:它会在你选定的位置上生成一个和源文件大小相同的文件,命令:ln xxx

无论是软链接还是硬链接,文件都保持同步变化。
因此,使用软链接可以将/var目录下占用空间较大的目录移动到富足的空间区块(如/home)下,使得/var下不再占用空间。
具体实现(/var/spool/clientmqueue目录为例):

mv /var/spool/clientmqueue /home  #将var下的clientmqueue目录移动到home或者其他空间富足的区块中
ln -s /home/clientmqueue /var/spool/clientmqueue  #/var/spool/clientmqueue 指向/home/clientmqueue,这样clientmqueue目录将不再占用/var目录的空间

Linux系统/var/spool/clientmqueue目录下存在大量文件的原因及解决方法

问题现象:linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件。原因分析:

系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

解决办法:
1、 将crontab里面的命令后面加上 > /dev/null 2>&1
例:
4 3 * * * /usr/bin/w > /dev/null 2>&1
2、知识点:
2>:重定向错误。
2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到/dev/null,即抛弃,同时,把产生的错误也抛弃。
3、清除/var/spool/clientmqueue/目录下的文件:
cd /var/spool/clientmqueue
rm -rf *
如果文件太多,占用空间太大,用上面命令删除慢的话,就执行下面的命令:
cd /var/spool/clientmqueue
ls | xargs rm -f

Nginx 配置wss

最近小程序用到WebSockets,服务器安装完环境和配置完nginx配置后老是出现错误代码1006;百思不得其姐之后,怀疑是因为自己nginx转发配置错了
最后发现,wss配置需要配置在ssl配置下,而我写错地方了,下面列出正确的配置


location /wss/ { proxy_pass http://127.0.0.1:2345; proxy_set_header X-Real-IP remote_addr; proxy_set_header Hosthost; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgradehttp_upgrade; proxy_set_header Connection "upgrade"; rewrite /wss/(.*) /$1 break; proxy_redirect off; }

服务器nginx完整配置

server {
        listen       80;
        root /www/web/app_xxx_com/public_html;
        server_name app.xxx.com;
        index index.php;
        error_page  400 /errpage/400.html;
        error_page  403 /errpage/403.html;
        error_page  404 /errpage/404.html;
        error_page  503 /errpage/503.html;
        location ~ \.php{
                proxy_pass http://127.0.0.1:88;
                include naproxy.conf;
        }
        location ~ /\.ht {
                deny  all;
        }
        location / {
                try_filesuri @apache;
        }

        location @apache {
                 internal;
                 proxy_pass http://127.0.0.1:88;
                 include naproxy.conf;
        }
}

server {
        listen       443;
        root /www/web/app_xxx_com/public_html;
        ssl                  on;
        ssl_certificate      cert/app.xxx.com.pem;
        ssl_certificate_key  cert/app.xxx.com.key;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        server_name app.xxx.com;
        index index.php;
        error_page  400 /errpage/400.html;
        error_page  403 /errpage/403.html;
        error_page  404 /errpage/404.html;
        error_page  503 /errpage/503.html;
        location ~ \.php{
                proxy_pass http://127.0.0.1:88;
                include naproxy.conf;
        }
        location ~ /\.ht {
                deny  all;
        }
        location / {
                try_filesuri @apache;
        }
        location @apache {
                 internal;
                 proxy_pass http://127.0.0.1:88;
                 include naproxy.conf;
        }
        location /wss {
                 proxy_pass http://127.0.0.1:2345;
                 proxy_http_version 1.1;
                 proxy_set_header Upgrade http_upgrade;
                 proxy_set_header Connection "Upgrade";
                 proxy_set_header X-Real-IPremote_addr;
        }

}

参考链接:https://wenda.workerman.net/question/1485
https://blog.csdn.net/Phoenix_smf/article/details/89278398

DenyHost 预防SSH暴力破解

DenyHosts安装及配置

一、DenyHost简介
DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
官网地址:http://denyhosts.sourceforge.net/
DenyHosts安装包下载地址:https://sourceforge.net/projects/denyhosts/files/
二、安装过程

tar zxvf DenyHosts-2.6.tar.gz                             #解压源码包
cd DenyHosts-2.6                                          #进入安装解压目录
python setup.py install                                   #安装DenyHosts
cd /usr/share/denyhosts/                                  #默认安装路径
cp denyhosts.cfg-dist denyhosts.cfg                       #denyhosts.cfg为配置文件
cp daemon-control-dist daemon-control                     #daemon-control为启动程序
chown root daemon-control                                 #添加root权限
chmod 700 daemon-control                                  #修改为可执行文件
ln -s /usr/share/denyhosts/daemon-control /etc/init.d     #对daemon-control进行软连接,方便管理

安装到这一步就完成了。
/etc/init.d/daemon-control start                          #启动denyhosts
chkconfig daemon-control on                               #将denghosts设成开机启动

三、配置文件简要说明

vim /usr/share/denyhosts/denyhosts.cfg        #编辑配置文件,另外关于配置文件一些参数,通过grep -v "^#" denyhosts.cfg查看
SECURE_LOG = /var/log/secure                  #ssh 日志文件 #redhat系列根据/var/log/secure文件来判断;
                                                           #Mandrake、FreeBSD根据 /var/log/auth.log来判断;
                                                           #SUSE则是用/var/log/messages来判断,这些在配置文件里面都有很详细的解释。
HOSTS_DENY = /etc/hosts.deny                  #控制用户登陆的文件
PURGE_DENY = 30m                              #过多久后清除已经禁止的,设置为30分钟;
# ‘m’ = minutes
# ‘h’ = hours
# ‘d’ = days
# ‘w’ = weeks
# ‘y’ = years
BLOCK_SERVICE = sshd                         #禁止的服务名,当然DenyHost不仅仅用于SSH服务
DENY_THRESHOLD_INVALID = 1                   #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 3                     #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 3                      #允许root登陆失败的次数
DAEMON_LOG = /var/log/denyhosts              #DenyHosts日志文件存放的路径,默认

更改DenyHosts的默认配置之后,重启DenyHosts服务即可生效:
/etc/init.d/daemon-control restart         #重启denyhosts

监控非SSH服务
需要添加正则匹配,官方文档有说明。

相似工具
Fail2Ban,使用iptables
BlockHosts
Blacklist

SSH安全配置
PermitRootLogin no
PasswordAuthentication no
Port 59922

参考文章:https://www.cnblogs.com/lcword/p/5912625.html

SVN:checkout时地址错误

SVN:

checkout时显示”执行上下文错误: 由于目标计算机积极拒绝,无法连接。”或者显示no repository found in svn……..

都是因为客户端的版本库URL地址写错了

 

正确的格式应该是svn://ip:port/项目文件夹

如svn://127.0.0.1:3690/aaa

其中项目文件夹对应在服务器端svn注册的地址,如果不确定服务器端注册的地址

可以在linux中,先运行命令:killall svnserve,杀掉svn

然后重新注册svn地址

例如服务器端的svb仓库地址为/opt/svn/

则注册该地址,运行命令:svnserve -d -r /opt/svn/

此时服务器端地址已经注册成功

 

然后回到客户端重新填写地址即可

例如需要checkout项目app,路劲为/opt/svn/app

只需要填写svn://ip:port/app即可

tips:一般svn端口都为3690,例如svn://ip:3690/app