分类 Linux 下的文章

Apache禁止非法域名(未绑定域名) 访问服务器

针对Apache2.4.1 以前的版本


NameVirtualHost *:80 # 非常重要的虚拟主机设置,如果忽略此处,则特定主机设置无法生效。

# 直接拒绝所有非法域名
<VirtualHost *:80>
  ServerName *
  ServerAlias *
  <Location />
    Order Allow,Deny
    Deny from all
  </Location>
  ErrorLog "logs/error.log"
  CustomLog "logs/error.log" common
</VirtualHost>

针对Apache2.4.1 以后的版本

http2.4.1 以后不再需要NameVirtualHost以及不再支持ServerName * 这种写法。
使用ServerName 会报Invalid ServerName “” use ServerAlias to set multiple server names。
<VirtualHost *:80>
  ServerName 服务器ip
  ServerAlias *
  <Location />
    Order Allow,Deny
    Deny from all
  </Location>
</VirtualHost>

Nginx配置中的log_format用法梳理(设置详细的日志格式)

nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。一般在nginx的配置文件中配置(比如:/usr/local/nginx/conf/nginx.conf)。

log_format指令用来设置日志的记录格式,它的语法如下:
log_format name format {format ...}
其中name表示定义的格式名称,format表示定义的格式样式。
 
log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下:
log_format combined '$remote_addr-$remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
 
也可以自定义一份日志的记录格式,不过要注意,log_format指令设置的名称在配置文件中是不能重复的。
 
假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。
原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。
通过$remote_addr变量拿到的将是反向代理服务器的IP地址。
 
但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。
这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。
 
例如,创建一个名为mylogformat的日志格式,在$http_x_forwarded_for变量记录用户的X_Forwarded-For IP 地址:
log_format mylogformat '$http_x_forwarded_for $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

在日志格式样式中,变量$remote_addr和$http_x_forwarded_for用于记录IP地址;
$remote_user用于记录远程客户端用户名称;
$time_local用于记录访问时间与时区;
$request用于记录请求URL与HTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent用于记录发送客户端的文件主体内容大小;
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户浏览器的相关信息。

- 阅读剩余部分 -

centos 安装 PPTP VPN 服务

1 安装前检查系统

在安装之前查看系统是否支持PPTP VPN:
modprobe ppp-compress-18 && echo ok
如果输出 ok,表示系统支持。

2 安装软件包

yum install ppp
yum install pptpd

3 配置pptpd

vim /etc/pptpd.conf ,去掉 localipremoteip 前的 # 号,并根据服务器网络配置ip,我的配置如下:

localip 10.0.0.254 # 设置pptp虚拟网卡接口IP地址(注意:不是服务器的公共IP)
remoteip 10.0.0.100-200 # 为拨入vpn的用户动态分配的IP地址池

vim /etc/ppp/options.pptpd ,找到 ms-dns 部分,做如下修改:

ms-dns 8.8.8.8  #添加主DNS服务器地址
ms-dns 8.8.4.4  #添加备DNS服务器地址

接下来添加VPN用户及密码:
vim /etc/ppp/chap-secrets,添加测试账号:

# Secrets for authentication using CHAP
# client    server    secret            IP addresses
user_test1       pptpd   123456                 *
user_test2       pptpd   123456                 *

4 开启IP转发

vim /etc/sysctl.conf,修改 net.ipv4.ip_forward = 0net.ipv4.ip_forward = 1,执行 sysctl -p

- 阅读剩余部分 -

LNMP 环境下,ThinkPHP5 设置 public 为根目录网页显示空白解决办法

为了去掉TP5 URL地址里面的public,把网站根目录改成了 /home/wwwroot/www.csensix.com/public ,重启Nginx(lnmp nginx restart 或者 service nginx restart)发现网站打开空白,什么都不显示(谷歌浏览器提示500错误)。经过查找资料发现是lnmp一键环境包做了防跨站防护,导致不能访问public以外的目录。服务器环境 :centos6.8 64位,lnmp1.5 一键环境包(php多版本)

按lnmp集成环境提供的方法(lnmp vhost add)添加虚拟站点,访问 TP 站点就要加个二级目录,如
http://www.csensix.com/public

所以为了可以让访问链接变得更加友好(即http://www.csensix.com),可以修改/usr/local/nginx/conf/vhost/www.csensix.com.conf(下称“专属配置”)。

root /home/wwwroot/www.csensix.com;
改成
root /home/wwwroot/www.csensix.com/public;

- 阅读剩余部分 -

Shell 脚本实现自动修改 Linux 用户密码

Linux 系统下通过 passwd 命令修改密码会进入交互模式,此时系统会等待用户输入。如果我们不希望进入交互模式,通过脚本或者文件自动完成输入,或者通过接收到的参数完成输入操作,如此就能省去人工输入。结合EOF就能完美解决这个问题,下面通过自动化修改 pure-FTPd 用户密码的脚本 passwd.sh 实例来说明。

#!/bin/bash

# $1 $2 分别代表执行此脚本时的第一和第二个参数
/usr/local/pureftpd/bin/pure-pw passwd $1 <<EOF
$2
$2
EOF
/usr/local/pureftpd/bin/pure-pw mkdb

按如下格式执行脚本:
/bin/bash passwd.sh ftpuser1 ftppassword

如果需要隐藏命令提示文字(标准输出),可添加 >/dev/null 2>&1,具体如下:

#!/bin/bash

# $1 $2 分别代表执行此脚本时的第一和第二个参数
/usr/local/pureftpd/bin/pure-pw passwd $1 <<EOF >/dev/null 2>&1
$2
$2
EOF
/usr/local/pureftpd/bin/pure-pw mkdb