分类归档:服务器相关

配置apache虚拟主机

基于不同情况下配置apache虚拟主机的方法,一共八种情况。首先查看你虚拟主机属于哪一种情况,然后对号入座就好了。过程不复杂,关键在于对症下药。

步骤/方法

  1. 基于ip地址的虚拟主机
    Listen 80
    <VirtualHost 172.20.30.40>
    DocumentRoot /home/httpd/html1
    ServerName www.ok1.com
    ErrorLog /usr/local/apache/logs/error1_log
    CustomLog /usr/local/apache/logs/access1_log combined
    </VirtualHost>
    <VirtualHost 172.20.30.50>
    DocumentRoot /home/httpd/html2
    ServerName www.ok2.com
    ErrorLog /usr/local/apache/logs/error2_log
    CustomLog /usr/local/apache/logs/access2_log combined
    </VirtualHost>
  2. 基于IP 和多端口的虚拟主机配置
    Listen 172.20.30.40:80
    Listen 172.20.30.40:8080
    Listen 172.20.30.50:80
    Listen 172.20.30.50:8080
    <VirtualHost 172.20.30.40:80>
    DocumentRoot /www/example1-80
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    DocumentRoot /www/example1-8080
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.50:80>
    DocumentRoot /www/example2-80
    ServerName www.example1.org
    </VirtualHost>
    <VirtualHost 172.20.30.50:8080>
    DocumentRoot /www/example2-8080
    ServerName www.example2.org
    </VirtualHost>
  3. 单个IP 地址的服务器上基于域名的虚拟主机配置
    # Ensure that Apache listens on port 80
    Listen 80
    # Listen for virtual host requests on all IP addresses
    NameVirtualHost *:80
    <VirtualHost *:80>
    DocumentRoot /www/example1
    ServerName www.example1.com
    ServerAlias example1.com. *.example1.com
    # Other directives here
    </VirtualHost>
    <VirtualHost *:80>
    DocumentRoot /www/example2
    ServerName www.example2.org
    # Other directives here
    </VirtualHost>
  4. 在多个IP 地址的服务器上配置基于域名的虚拟主机
    Listen 80
    # This is the “main” server running on 172.20.30.40
    ServerName server.domain.com
    DocumentRoot /www/mainserver
    # This is the other address
    NameVirtualHost 172.20.30.50
    <VirtualHost 172.20.30.50>
    DocumentRoot /www/example1
    ServerName www.example1.com
    # Other directives here …
    </VirtualHost>
    <VirtualHost 172.20.30.50>
    DocumentRoot /www/example2
    ServerName www.example2.org
    # Other directives here …
    </VirtualHost>
  5. 在不同的端口上运行不同的站点(基于多端口的服务器上配置基于域名的虚拟主机)
    Listen 80
    Listen 8080
    NameVirtualHost 172.20.30.40:80
    NameVirtualHost 172.20.30.40:8080
    <VirtualHost 172.20.30.40:80>
    ServerName www.example1.com
    DocumentRoot /www/domain-80
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    ServerName www.example1.com
    DocumentRoot /www/domain-8080
    </VirtualHost>
    <VirtualHost 172.20.30.40:80>
    ServerName www.example2.org
    DocumentRoot /www/otherdomain-80
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    ServerName www.example2.org
    DocumentRoot /www/otherdomain-8080
    </VirtualHost>
  6. 基于域名和基于IP 的混合虚拟主机的配置
    Listen 80
    NameVirtualHost 172.20.30.40
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example1
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example2
    ServerName www.example2.org
    </VirtualHost>
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example3
    ServerName www.example3.net
    </VirtualHost>

外链欺骗的几种方法

1.iframe链接。
2.JS链接
<script>document.write(“<a href=http://www.coolaj.cn>暗月梦魂’s Home</a>”);</script>
3.nofollow欺骗

PR劫持

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.google.com/');

$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);

if (strpos($useragent, 'googlebot')!== false){
return 'Googlebot';
}

 

判断是否为蜘蛛 做301重定向

aliyun主机安装

liunx篇
—————————————-
cd /home && mkdir tmp && cd tmp
yum install -y unzip zip
wget http://soft.phpwind.me/web/sh.zip
unzip sh.zip
ll
cd sh && chmod +x install*.sh && ./install.sh
vi account.log

yum install lftp
mkdir /alidata/shell/

vi /alidata/shell/update.sh
#!/bin/bash
lftp -f /alidata/shell/aj.txt

~~~~~~~~~~~~~~~~~~~~~~~
同步FTP
A服务器上传
~~~~~~~~~~~~~~~~~~~~~~~
vi /alidata/shell/aj.txt
txt 文件
open ftp://www:www@B:21
mirror -R -v -n -e /alidata/www/XXX/ /XXX
然后 lftp -f /alidata/shell/aj.txt
—————————-

vi /alidata/shell/cut_nginx_log.sh
—————————

#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/alidata/log/nginx/access/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}zutuanmai.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/zutuanmai_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /alidata/server/nginx-1.0.4/logs/nginx.pid`

 

阅读全文 ……

阿里云centos 安装PHP+Mysql+Nginx步骤

安装步骤:

//查看当前文件系统
[root@localhost ~]# df -h
//查找分区
[root@localhost ~]# fdisk /dev/sda
Command (m for help): p //选择
Command (m for help): n //选择
Command action
e extended
p primary partition (1-4)
P //选择
p primary partition (1-4) 1 //选择
Command (m for help): w //选择
[root@localhost ~]# partprobe
[root@localhost ~]# fdisk -l
[root@localhost ~]# mkfs.ext3 /dev/sda
PS:这里可能要写 sda1
[root@localhost ~]# fdisk -l
[root@localhost ~]# mkdir -p /data
[root@localhost ~]# vi /etc/fstab
/dev/sda1 /data ext3 defaults 0 0
[root@localhost ~]# mount –a
[root@localhost ~]# df -h

更新升级源
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
wget http://blog.s135.com/soft/linux/centos/5.2/CentOS-Base.repo

网易开通了一个开源软件的镜像站点,网址为:

http://mirrors.163.com/

第一步:
#—————————————-
|利用CentOS Linux系统自带的yum命令安装、升级所需的程序库
|(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装)
#—————————————-

#设置默认语言为中文
LANG=C

#运行yum命令 安装程序 yum -y insall
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

#—————————————-
*RedHat AS4 系统环境
#—————————————-
I.i386 系统 wget ->下载
rpm ->rmp原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。
-i  显示套件的相关信息。
-h或–hash  套件安装时列出标记。
-v  显示指令执行过程。

#————————————————————————————–+
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libjpeg-devel-6b-33.i386.rpm
# rpm -ivh libjpeg-devel-6b-33.i386.rpm
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/freetype-devel-2.1.9-1.i386.rpm
# rpm -ivh freetype-devel-2.1.9-1.i386.rpm
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/i386/libpng-devel-1.2.7-1.i386.rpm
# rpm -ivh libpng-devel-1.2.7-1.i386.rpm
#————————————————————————————–+

#—————————————-
II.x86_64 系统
#—————————————-
#—————————————————————————————-+
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libjpeg-devel-6b-33.x86_64.rpm
# rpm -ivh libjpeg-devel-6b-33.x86_64.rpm
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/freetype-devel-2.1.9-1.x86_64.rpm
# rpm -ivh freetype-devel-2.1.9-1.x86_64.rpm
# wget http://blog.s135.com/soft/linux/nginx_php/rpm/x86_64/libpng-devel-1.2.7-1.x86_64.rpm
# rpm -ivh libpng-devel-1.2.7-1.x86_64.rpm
#—————————————————————————————-+

第二步:
#—————————————-
|下载程序源码包|
#—————————————-
#——————————————————————————————–+

# mkdir -p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录
mkdir -p /data0/software
cd /data0/software

#可以把下载好的的语言包复制到/data0/software目录

wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.15.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/php/php-5.2.10.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz
wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.38.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/libiconv/libiconv-1.13.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
wget http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-7.9.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/eaccelerator/eaccelerator-0.9.5.3.tar.bz2
wget http://blog.s135.com/soft/linux/nginx_php/pdo/PDO_MYSQL-1.0.2.tgz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/ImageMagick.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/imagick/imagick-2.2.2.tgz
#———————————————————————————————+

阅读全文 ……

Linux 监控VPS服务器负载/CPU

主要用于监控 linux 服务器负载及内存占用,如 MySQl、php-fpm,当负载或内存占用达到设置值后,便自动重启该进程以避免宕机。
# 设置最大内存占用百分比
PID_MEM_MAX=”85″

# 设置最大系统负载
SYS_LOAD_MAX=”3″

# 设置需要监控的服务名称
NAME_LIST=”php-fpm mysql”

for NAME in $NAME_LIST
do
# 初始化内存统计
PID_MEM_SUM=0

# 获取该程序总进程数
PID_NUM_SUM=`ps aux | grep $NAME | wc -l`

# 列出每个进程内存占用百分比
PID_MEM_LIST=`ps aux | grep $NAME | awk ‘{print $4}’`

# 计算所有进程总内存占用
for PID_MEM in $PID_MEM_LIST
do
PID_MEM_SUM=`echo $PID_MEM_SUM + $PID_MEM | bc`
done

# 获取最近一分钟系统负载
SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`

# 比较内存占用和系统负载是否超过阀值
MEM_VULE=`awk ‘BEGIN{print(‘”$PID_MEM_SUM”‘>='”$PID_MEM_MAX”‘?”1″:”0″)}’`
LOAD_VULE=`awk ‘BEGIN{print(‘”$SYS_LOAD”‘>='”$SYS_LOAD_MAX”‘?”1″:”0″)}’`

# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正常停止服务
/etc/init.d/$NAME stop
sleep 3
# 强制关闭
pkill $NAME

# 重启
/etc/init.d/$NAME start
#写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
else
echo “$NAME very health!(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” > /dev/null
fi
done

以上代码保存为一个文件,例如:auto_reboot.sh

添加计划任务,设置每分钟检查一次

crontab -e
* * * * * /bin/bash/root/auto_reboot.sh

注意文件的位置要搞正确。
请确保您的Linux系统中已经安装了bc,否则会出现错误。查看是否安装了bc可以使用命令:
bc -v

如果没有安装,centos可以用 yum -y install bc 安装它
可以使用命令
sh /bin/bash/root/auto_reboot.sh

测试以上脚本,如果出现 syntax error near unexpected token `do 这样的错误请查看本站文章《Linux 下sh脚本执行时出现 syntax error near unexpected token `do 错误的解决方法 》一文。

CentOS VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本:

#!/bin/sh
#usage: */2 * * * * root /root/checkload.sh
# [CentOS]VPS服务器根据CPU负载及内存占用自动重启脚本
# 设置最小剩余内存,一般至少要剩余50M可用(单位兆)
FREE_MEM_MIN=”50″
# 设置最大系统负载
SYS_LOAD_MAX=”3″
# 设置重启服务的最小剩余内存(单位兆)
RESTART_FREE_MEM_MIN=”500″
# 设置需要监控的服务名称
NAME_LIST=”httpd mysqld”
for NAME in $NAME_LIST
do
# 获得剩余内存(单位兆)
FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
# 获得已用内存(单位兆)
#FREE_MEM=`free -m|grep Mem|awk ‘{print $3}’`
# 获取最近一分钟系统负载
SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`
# 比较内存占用和系统负载是否超过阀值
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘<'"$FREE_MEM_MIN"'?"1":"0")}'` LOAD_VULE=`awk 'BEGIN{print('"$SYS_LOAD"'>='”$SYS_LOAD_MAX”‘?”1″:”0″)}’`

# 测试结果
#LOAD_VULE=”1″
#echo $(date +”%y-%m-%d %H:%M:%S”) “DEBUG $NAME” “(FREE_MEM:$FREE_MEM|$MEM_VULE,LOAD:$SYS_LOAD|$LOAD_VULE)”>> /var/log/autoreboot_debug.log

# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正常停止服务
service $NAME stop
sleep 3
# 强制关闭
skill $NAME
# 重启
sleep 10
for i in 1 2 3
do
FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>='”$RESTART_FREE_MEM_MIN”‘?”1″:”0”)}’`
if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
then
service $NAME start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
fi
done

# 写入日志
echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
else
MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>='”$RESTART_FREE_MEM_MIN”‘?”1″:”0″)}’`
if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
then
service $NAME start
sleep 15
echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
else
echo “$NAME very health!(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” > /dev/null
fi
fi
done

postfix服务器创建

一、准备工作

1. 为邮件服务器添加DNS解析

虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录。比如域名coolaj.cn,对应的DNS记录如下:
A mail
MX mail.xxx.com
TXT v=spf1 mx -all

2. 准备存放邮件的硬盘空间

如果用的是阿里云入门级Linux服务器,有一块20G的数据盘未挂载,需要格式化并挂载(假设这里挂载的目录是/data),具体操作步骤见之前的博文阿里云云服务器硬盘分区及挂载。

二、配置postfix

postfix是CentOS默认安装的邮件服务器软件。以下配置示例假设要配置的域名是coolaj.cn,邮件服务器主机名是mail.coolaj.cn。

1. 打开postfix的配置文件 阅读全文 ……

完美解决Nginx 504 Gateway time-out

最近用dedecms建的一个网站新增了大批内容,有三个栏目的内容量都超过了两千篇,超过两千三百篇的两个栏目在生成栏目列表的时候就出现了504 Gateway time-out 服务器用的是nginx,我不是很懂,服务器维护人员在网上随便找了一篇文章,修改了nginx的缓存设置,不管用,他就不管了,可是我不能不管啊,不能生成列表页面,那后面的内容不是都不能用了么?

把数据库下载到本地,在本地配置了nginx,试了很多遍,都不行,又改到Apache下面,更夸张,生成了83个页面就不能继续了,看来还是nginx更厉害一点,虽然出现504 Gateway time-out,但好歹能够全部生成。

只好又继续在网上找更多的解决办法,尝试了N多次以后,终于让我找到了一个有用的方法,想想以后可能还有碰到这样的问题,就把那篇文章复制过来放在这里,供以后参考吧,对有同样问题的朋友也是一个帮助。

下面部分是引用部分,我自己不懂技术的,在我的dedecms5.6里面有用,别人的自己尝试吧。
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止。

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI。

解决这两个问题其实是需要综合思考的,一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关,而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。

而正确的设置需要考虑服务器自身的性能和访客的数量等多重因素。

以我目前的服务器为例子CPU是奔四1.5G的,内存1GB,CENTOS的系统,访客大概是50人左右同时在线。

但是在线的人大都需要请求PHP-CGI进行大量的信息处理,因此我将nginx.conf设置为: 阅读全文 ……

利用 lftp 为VPS/其他系统镜像备份

安装: yum install -y lftp

 

lftp mirror的参数如下:

 

-c, –continue 如果可能, 继续一个镜像任务

 

-e, –delete 删除在远程站点不存在的文件

 

-s, –allow-suid 根据远程站点设置相应的 suid/sgid 位

 

-n, –only-newer 只下载新的文件 (-c 没有作用)

 

-r, –no-recursion 不下载子目录

 

-p, –no-perms 不设置文件权限

 

–no-umask 不在文件上使用umask

 

-R, –reverse 反向镜像 (上传文件)

 

-L, –dereference 下载符号链接指向的文件

 

-N, –newer-than FILE 只下载比文件 FILE 更新的文件

 

-i RX, –include RX 包括匹配的文件 (只能使用一次)

 

-x RX, –exclude RX 不包括匹配的文件 (只能使用一次)

 

RX 是括展的正则表达式

 

-t Nx, –time-prec Nx 设置时间精度为 N 秒 (x=s) 分钟 (x=m) 小时 (x=h) 或者天 (x=d) 默认值 – 12 小时

 

-v, –verbose 显示详细的信息

 

–log=FILE 将执行过的命令写入日志文件<FILE>

 

–script=FILE 把命令写入脚本文件但不执行

 

–just-print, –dry-run 同 –script=<>FILE

 

当使用 -R 参数时,第一个目录为本地目录,第二个为远程目录

 

如果第二项没有填写,则采用第一个个目录的名称

 

如果两项都没填写,则采用当前的本地和远程目录

 

 

 

那么,具体是如何实现的呢?

 

1、新建一个脚步, test.txt

 

test.txt 内容如下:

 

open ftp://备份空间用户名:备份空间密码@备份空间地址

 

mirror -R -v -n -e 源文件目录 目标站目录  (把-e去掉,就不会删除目标目录废弃的文件)

 

例如:

open ftp://lftptest:123456@192.168.3.11

 

mirror -R -v -n -e /root/test/ /public_html

即是将/root/test/目录下的所有文件上传到ftp://192.168.3.11/mirror目录下。

2、新建sh脚本, upload.sh

upload.sh 内容如下:

#!/bin/bash

lftp -f /root/test.txt

记得给 upload.sh 赋可执行权限: chmod 755 /root/upload.sh

3、设置自动任务

crontab -e

加入:

每天,4时

0 4 * * * /root/upload.sh;

每周六,4时:

0 4 * * 6 /root/upload.sh;

如果两边都是独立的操作系统或VPS,可使用rsync来同步文件。

 

 

参考设置

set ftp:charset gbk

set file:charset utf-8

set ftp:passive-mode off

Linux下cp直接覆盖不提示的方法!

新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的。。。

  把a目录下的文件复制到b目录
  cp –r a/* b
  执行上面的命令时,b存在的每个文件都会提示是否覆盖;
  cp –r –f a/* b
  执行上面的命令时,b存在的每个文件都不再会提示;
  这是我们希望的理想状态,但是有时加了-f了,怎么还会有提示呢?原来一些服务器会默认增加别名 alias cp=’cp -i’,当你执行cp时,其实执行的是cp –i。
  在终端执行alias就可以看出来了。
  [root@devdb ~]# alias
  alias cp=’cp -i’
  可以这样解决
  [root@devdb ~]# vi ~/.bashrc
  在alias cp=’cp -i’前加上”#”注释掉这行,:wq!保存推出,然后重新登陆就可以了。
=================================
alias cp=”cp -f”
直接输入以上命令,在当前shell生效。放入 ~/.bashrc 中,以后的新shell中都生效(当前shell不生效,退出再重新login以后生效)
此法新手慎用