月度归档:2016年12月

php获取文件mime类型Fileinfo等方法

php如何获取文件(图片)的mime 类型呢?可以使用php mime_content_type()函数,使用开发用的ubuntu server lamp的默认配置测试后完全支持,返回了正确的文件mime type。但是将该API项目移植到Centos 5.2(内核2.6) LAMP环境时,出现了如下错误提示:
Fatal error: Call to undefined function: mime_content_type()
最后查看了最新的php手册发现php mime_content_type()函数已经被废弃,当然官方不推荐使用,而且需要经过适当的php配置后才能使用。因此要获取图片或其他的文件的 MIME类型,Fatal error: Call to undefined function: mime_content_type()错误就有了以下几种解决方案。
mime_content_type()函数判断获取mime类型
如果对已被php 5.3.0废弃的mime_content_type()函数仍然情有独钟,那么可以对php进行配置启用magic_mime扩展。比如Centos下使用phpinfo()查看php apache配置,查找到mime-magic,如果显示“–without-mime-magic”,则要编译php切换到”with-mime-magic“选 项。mime_content_type()函数还依赖于Apache httpd 的magic文件(mime_magic.magicfile),为了检测文件的MIME类型,必须配置告知magic文件的地址,如’–with- mime-magic=/usr/share/file/magic.mime’。Windows环境下还需要在php.ini中添加:
mime_magic.magicfile = “$PHP_INSTALL_DIRmagic.mime”
其中$PHP_INSTALL_DIR是你的php安装目录。在有些LAMP环境下,这个mime_magic文件不一定存在或可读,还要另外下载。另外有些虚拟主机为了安全考虑,即使是有with-mime-magic也不一定会返回正确的mime类型,有时候会返回空字符串。因此,就凭mime_content_type()函数已经被废弃这一项,就不推荐使用该方法获取文件MIME类型了。
php Fileinfo 获取文件MIME类型(finfo_open)
PHP官方推荐mime_content_type()的替代函数是Fileinfo函数。PHP 5.3.0+已经默认支持Fileinfo函数(fileinfo support-enabled),不必进行任何配置即可使用finfo_open()判断获取文件MIME类型。Centos 默认安装的LAMP环境php版本还是PHP5.2.6,低于5.3.0版本则可能出现类似错误提示:PHP Fatal error: Call to undefined function finfo_open() in…。因为之前的php版本,需要加载magic_open类,fileinfo函数属于PECL扩展,启用fileinfo PECL扩展才能检测MIME类型。所以有两种途径使用fileinfo获取文件的MIME类型。
    将php版本升级到5.3.0以上。php官方也已经不再维护和更新这个fileinfo pecl扩展包,所以升级是最好的办法。
    安装fileinfo pecl扩展,Centos linux 如何安装fileinfo:在Centos下面安装fileinfo命令(rpm):yum install php-pecl-Fileinfo。或使用源码安装编译:

    cd /usr/src/down &&  wget http://pecl.php.net/get/Fileinfo-1.0.4.tgz
    tar zxvf  Fileinfo-1.0.4.tgz
    cd /usr/src/down/Fileinfo-1.0.4 && phpize && ./configure && make && make install
    还可以使用网上流传较多的一种方法,Linux通过phpize使用pecl指令来安装fileinfo:
        若没有phpize指令,需要先安装。#phpize检测若提示”No command ‘phpize’ found”,则需先安装phpize;
        下载安装php-devel(php5-dev)的rpm,安装phpize;
        service httpd restart 或 reboot;
        命令 pecl install fileinfo 安装fileinfo扩展。
        安装完毕,/usr/lib/php/module目录下多了fileinfo.so文件,/usr/share/file目录下多了magic.mime和magic两个文档
        修改php.ini配置:加入 extension=”fileinfo.so”
        service httpd restart
        Windows服务器下安装fileinfo相似,php.ini:extension=php_fileinfo.dll

image_type_to_mime_type()获取图片MIME类型
如果我们需要判断MIME类型的文件只有图像文件,那么首先可以使用exif_imagetype()函数获取图像类型常量,再用 image_type_to_mime_type()函数将图像类型常量转换成图片文件的MIME类型。同样php.ini中要配置打开 php_mbstring.dll(Windows需要)和extension=php_exif.dll。phpinfo()“–enable-exif”。首先exif_imagetype返回的是图像类型常量(Imagetype Constants),如IMAGETYPE_GIF、IMAGETYPE_JPEG、IMAGETYPE_PNG等。
<?php
$image = exif_imagetype(“f:\test.jpg”);   //本地路径或远程图片地址均可  IMAGETYPE_GIF//
$image = exif_imagetype(“http://www.phpec.org/logo.gif”);
$mime = image_type_to_mime_type($image);
echo $mime;  // 输出image/jpeg
?>

php上传文件获取MIME类型
如果使用php上传文件,检测上传文件的MIME类型,则可以使用全局变量$_FILES[‘uploadfile’][‘type’],由客户端的浏览器检测获取文件MIME类型。

Centos 系统或其他环境下若都不方便获取文件MIME类型的话,还有最后一种绝对可行的方法,就是读取文件名后缀,根据后缀名一一对应文件的MIME类型,具体可以参考php手册上的这条评论。当然这种方法检测到的MIME文件类型不一定是非常准确的。

 


如果又很不幸的出现 call an undefined function exif_imagetype()
打开扩展 extension=php_exif.dll
并将extension=php_mbstring.dll ,放到extension=php_exif.dll前边

 

使用tinyproxy stunnel搭建 https proxy 服务器

在各种上网的方法当中,https proxy 可能是最简单、方便、快速的,它免去了 vpn 各种拨号连接的麻烦,也免去了安装各种客户端的麻烦,同时搭建所用的软件也是历史悠久的非常稳定。

吐槽:如果问为什么这么好的方式却很少人用,答案可能是因为它需要较多的¥money,而且可能需要一张双币/多币种信用卡来购买这些东西:一个虚拟服务器 vps,一个域名,一个 SSL 证书。vps 我比较推荐 linode,并不是因为你戳一下这个链接并成功购买后能返回一点零钱给我,而是 linode 相当厚道,它会跟随主流免费为你升级 CPU、内存、硬盘、带宽等等。域名和 SSL 证书大家可以参考我的前一篇《如何购买廉价 SSL 证书》。全部扔上购物车一年大概 $150 以上,捉襟见肘的可以考虑多人合购。

好了说回正题,用于实现 https proxy 的服务端软件很多,可以用老掉牙但很稳定的 squid,也可以随便用一个轻量级的 http proxy 程序搭配老掉牙的 stunnel,或者试试新秀 node-spdyproxy 也可以。

下面介绍一下比较简单的方案:轻量级 http proxy 程序 tinyproxy + stunnel 。

1、安装 c和 stunnel

首先使用各个 Linux 发行版的包管理器安装 tinyproxy 和 stunnel,比如:

$ sudo yum install tinyproxy stunnel // 对于 centos linux

$ sudo pacman -S tinyproxy stunnel // 对于 arch linux

 

安装完成后顺便设置它们随开机启动(可选)。

2、设置 stunnel

把你证书私钥和购买的证书扔到 /etc/stunnel 里,然后编辑文件 stunnel.conf,先指定私钥和证书文件名:

cert = /etc/stunnel/mycert.pem

key = /etc/stunnel/mykey.pem

需要注意的是从证书服务商购买回来的证书通常是几个小文件,大概有是:一个你的域名证书,一个证书链证书,一个root证书。把它们用文本编辑器打开,然后按照上述的顺序复制粘贴成一个文件,这个文件就是上面 ”cert=“ 这行所需的文件。

然后指定端口转换,比如将端口 443 (https 的默认端口)绑定并转换到 tinyproxy 的默认端口 8888:

[https]

accept = 443

connect = 127.0.0.1:8888

其中 https 这个一项绑定的名称,可以随便起,accept 表示本机监听的端口,connect 表示转换到哪里。完整的意思就是为 127.0.0.1:8888 添加 SSL 加密层,然后通过 443 端口对外服务。

 

3、客户端设置

目前默认支持 https/spdy 代理的只有 google chrome 浏览器(其他浏览器需要在客户端运行 stunnel 把 https 翻译为 http 才能使用)。而且很诡异的是 chrome 没有自己独立设置 proxy 的地方,使用系统全局的那个 https 设置是不行的(因为系统那个 https 代理指的是当你访问 https 的网站时所走的 http 代理通道,跟我们这篇说的 https proxy 是两码事),所以你还得在 chrome 浏览器里安装插件  TunnelSwitch,然后在这个插件里设置 https 代理为:“你的网站域名:443”,这样所有工作都完成可以直接上网了。

4、一个给爱折腾的人的省钱方案

如果想节省购买 SSL 证书的花费,那么自己生成一个“自签名”的证书也是可以的,不过如果你的 proxy 想共享给其他人使用的话,要慎重考虑这种方式,因为它会让不爱折腾的人觉得很折腾。

用下面命令即可生成一个自签名证书:

openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -subj "/CN=localhost" -out req.pem
openssl x509 -req -days 365 -in req.pem -signkey key.pem -out cert.pem

注意要将上面的 localhost 更改为你的域名,最终有用的分别是私钥文件 key.pem 和证书文件 cert.pem,把这两个文件替换上面第二步所提到的位置即可。

然后在客户端需要导入这个 cert.pem 才能顺利使用你所搭建的 https proxy 服务。各个操作系统的导入证书方法都不太相同。

  • 在 linux 里比较麻烦,需要用 libnss3 工具 certutil 来完成,命令如下:
$ certutil -d "sql:$HOME/.pki/nssdb" -A -n dummy -i cert.pem -t C
  • 在 mac osx 里使用 keychain 工具,把证书拖进”证书“一栏里。
  • 在 windows 里双击证书文件,在选择“导入到位置”那一步选择”根信任“。

然后重启你的 chrome 浏览器就可以了。

Nginx Google 扩展,让google反向代理的配置和使用wen.lu一样简单.

en.lu 一路走到现在, 离不开大家的支持!

很多朋友通过各种方式问过我: “你丫怎么不开源啊…”

先向那些朋友道歉啊, 其实不是我不想开源, 只是之前的版本配置实在太复杂. nginx 三方扩展用了一大堆, 外加 lua, 以及突破千行的配置工程, 这么拙劣的技艺, 实在不好意思拿出来分享

遂决定写一个扩展, 让google反代的配置和使用wen.lu一样简单.

location / { google on;
}

你没有看错, “一行配置, google 我有!”

现在 g2.wen.lu 就是由该扩展驱动

Demo Site

依赖库

  1. pcre 正则
  2. ngx_http_proxy_module 反向代理
  3. ngx_http_substitutions_filter_module 多重替换

安装

以 ubuntu 14.04 为例 i386, x86_64 均适用

最简安装
# # 安装 gcc & git # apt-get install build-essential git gcc g++ make # # 下载最新版源码 # nginx 官网:  # http://nginx.org/en/download.html # wget "http://nginx.org/download/nginx-1.7.8.tar.gz" # # 下载最新版 pcre # pcre 官网: # http://www.pcre.org/ # wget "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz" # # 下载最新版 openssl # opessl 官网: # https://www.openssl.org/ # wget "https://www.openssl.org/source/openssl-1.0.1j.tar.gz" # # 下载最新版 zlib # zlib 官网: # http://www.zlib.net/ # wget "http://zlib.net/zlib-1.2.8.tar.gz" # # 下载本扩展 # git clone https://github.com/cuber/ngx_http_google_filter_module # # 下载 substitutions 扩展 # git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module # # 解压缩 # tar xzvf nginx-1.7.8.tar.gz
tar xzvf pcre-8.38.tar.gz
tar xzvf openssl-1.0.1j.tar.gz
tar xzvf zlib-1.2.8.tar.gz # # 进入 nginx 源码目录 # cd nginx-1.7.8 # # 设置编译选项 # ./configure \
  --prefix=/opt/nginx-1.7.8 \
  --with-pcre=../pcre-8.38 \
  --with-openssl=../openssl-1.0.1j \
  --with-zlib=../zlib-1.2.8 \
  --with-http_ssl_module \
  --add-module=../ngx_http_google_filter_module \
  --add-module=../ngx_http_substitutions_filter_module # # 编译, 安装 # 如果扩展有报错, 请发 issue 到 # https://github.com/cuber/ngx_http_google_filter_module/issues # make
sudo make install # # 启动, 安装过程到此结束 # sudo /opt/nginx-1.7.8/sbin/nginx # # 配置修改后, 需要 reload nginx 来让配置生效,  # sudo /opt/nginx-1.7.8/sbin/nginx -s reload
从发行版迁移
# # 安装 gcc & git # apt-get install build-essential git gcc g++ make # # 安装发行版 # (已安装的请忽略) # apt-get install nginx # # 查看发行版编译选项及版本 # nginx -V # nginx version: nginx/1.4.7 # built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1) # TLS SNI support enabled # configure arguments:  #  --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' \ #  --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' \ #  --prefix=/usr/share/nginx \ #  --conf-path=/etc/nginx/nginx.conf \ #  --http-log-path=/var/log/nginx/access.log \ #  --error-log-path=/var/log/nginx/error.log \ #  --lock-path=/var/lock/nginx.lock \ #  --pid-path=/run/nginx.pid \ #  --http-client-body-temp-path=/var/lib/nginx/body \ #  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ #  --http-proxy-temp-path=/var/lib/nginx/proxy \ #  --http-scgi-temp-path=/var/lib/nginx/scgi \ #  --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ #  --with-debug \ #  --with-pcre-jit \ #  --with-ipv6 \ #  --with-http_ssl_module \ #  --with-http_stub_status_module \ #  --with-http_realip_module \ #  --with-http_addition_module \ #  --with-http_dav_module \ #  --with-http_geoip_module \ #  --with-http_gzip_static_module \ #  --with-http_image_filter_module \ #  --with-http_spdy_module \ #  --with-http_sub_module \ #  --with-http_xslt_module \ #  --with-mail \ #  --with-mail_ssl_module # # 下载对应 nginx 大版本 # nginx 官网:  # http://nginx.org/en/download.html # wget "http://nginx.org/download/nginx-1.4.7.tar.gz" # # 下载本扩展 # git clone https://github.com/cuber/ngx_http_google_filter_module # # 下载 substitutions 扩展 # git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module # # 安装依赖库的 dev 包 # apt-get install libpcre3-dev libssl-dev zlib1g-dev libxslt1-dev libgd-dev libgeoip-dev # # 请对照自己发行版的 configure 参数进行 configure, 勿直接 copy 以下配置 # ./configure \
  --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' \
  --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' \
  --prefix=/usr/share/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --http-log-path=/var/log/nginx/access.log \
  --error-log-path=/var/log/nginx/error.log \
  --lock-path=/var/lock/nginx.lock \
  --pid-path=/run/nginx.pid \
  --http-client-body-temp-path=/var/lib/nginx/body \
  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
  --http-proxy-temp-path=/var/lib/nginx/proxy \
  --http-scgi-temp-path=/var/lib/nginx/scgi \
  --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
  --with-debug \
  --with-pcre-jit \
  --with-ipv6 \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --with-http_addition_module \
  --with-http_dav_module \
  --with-http_geoip_module \
  --with-http_gzip_static_module \
  --with-http_image_filter_module \
  --with-http_spdy_module \
  --with-http_sub_module \
  --with-http_xslt_module \
  --with-mail \
  --with-mail_ssl_module \
  --add-module=../ngx_http_google_filter_module \
  --add-module=../ngx_http_substitutions_filter_module # # 覆盖二进制文件 # cp -rf objs/nginx /usr/sbin/nginx # # 重启 nginx 至此, 迁移工作结束 #  service nginx stop
service nginx start # # 配置修改后, 需要 restart nginx 来让配置生效 # service nginx restart

基本配置方法

http配置方式

server { server_name <你的域名>; listen 80; resolver 8.8.8.8; location / { google on;
  }
}

https配置方式

server { server_name <你的域名>; listen 443; ssl on; ssl_certificate <你的证书>; ssl_certificate_key <你的私钥>; resolver 8.8.8.8; location / { google on;
  }
}

进阶配置方法

基本搜索

需要配置 resolver 用于域名解析

server { # ... 仅列举部分配置 resolver 8.8.8.8; location / { google on;
  } # ... }
谷歌学术

google_scholar 依赖于 google, 所以 google_scholar 无法独立使用.

由于谷歌学术近日升级, 强制使用 https 协议, 并且 ncr 已经支持, 所以不再需要指定谷歌学术的 tld

配置 nginx

location / { google on; google_scholar on;
}
默认语言偏好

默认的语言偏好可用 google_language 来设置, 如果没有设置, 默认使用 zh-CN (中文)

location / { google on; google_scholar on; # 设置成德文 google_language "de"; 
}

支持的语言如下.

ar    -> 阿拉伯
bg    -> 保加利亚
ca    -> 加泰罗尼亚
zh-CN -> 中国 (简体)
zh-TW -> 中国 (繁体)
hr    -> 克罗地亚
cs    -> 捷克
da    -> 丹麦
nl    -> 荷兰
en    -> 英语
tl    -> 菲律宾
fi    -> 芬兰
fr    -> 法国
de    -> 德国
el    -> 希腊
iw    -> 希伯来
hi    -> 印地文
hu    -> 匈牙利
id    -> 印度尼西亚
it    -> 意大利
ja    -> 日本
ko    -> 朝鲜
lv    -> 拉脱维亚
lt    -> 立陶宛
no    -> 挪威
fa    -> 波斯
pl    -> 波兰
pt-BR -> 葡萄牙 (巴西)
pt-PT -> 葡萄牙 (葡萄牙)
ro    -> 罗马尼亚
ru    -> 俄罗斯
sr    -> 塞尔维亚
sk    -> 斯洛伐克
sl    -> 斯洛文尼亚
es    -> 西班牙
sv    -> 瑞典
th    -> 泰国
tr    -> 土耳其
uk    -> 乌克兰
vi    -> 越南 
搜索引擎爬虫许可

任何搜索引擎爬虫都不被允许爬取 google 镜像

如下的默认 robots.txt 已经内置.

User-agent: *
Disallow: / 

如果想要使用 google 自己的 robots.txt 请将 google_robots_allow 设为 on

  #... location / { google on; google_robots_allow on;
  } #...
Upstreaming

upstream 减少一次域名解析的开销, 并且通过配置多个网段的 google ip 能够一定程度上减少被 google 机器人识别程序侦测到的几率 (弹验证码).

# 可以通过如下方法获取 google ip~ dig www.google.com @8.8.8.8 +short
173.194.38.209
173.194.38.211
173.194.38.212
173.194.38.210
173.194.38.208

然后将获取到的 ip 配置如下即可

upstream www.google.com { server 173.194.38.209:443; server 173.194.38.211:443; server 173.194.38.212:443; server 173.194.38.210:443; server 173.194.38.208:443;
}
Proxy Protocal

默认采用 https 与后端服务器通信.

你可以使用 google_ssl_off 来强制将一些域降到 http 协议.

这个设置可以让一些需要二次转发的域通过 http 协议进行转发, 从而不再依赖 ssl 证书.


https://github.com/cuber/ngx_http_google_filter_module/blob/master/README.zh-CN.md
https://github.com/cuber/ngx_http_google_filter_module/blob/master/README.md

永久更改hostname主机名

# vi /etc/sysconfig/network 

NETWORKING=yes 

HOSTNAME=yourname //在这修改hostname 

NISDOMAIN=eng-cn.platform.com 



2.修改/etc/hosts里面的名字 

# vi /etc/hosts 

127.0.0.1 localhost.localdomain localhost 

172.17.33.169 yourname //在这修改hostname 



3.最后在终端下执行: 

#hostname ***** //*****为修改的hostname

hostname命令只是临时改变主机名,重启后主机名还是恢复成原来的。要想永久更改主机名,需要修改/etc/sysconfig/network 文件。

今天发现一个问题,由于个人习惯问题,装系统的时候并没有设置好LINUX的主机名,而是习惯用 

# hostname (主机名) 

进行设置,当重新登录到系统的时候,设置的主机名就生效,由于服务器长期开着,也不太重启,所以一直没有注意当重启机器后,使用hostname 设置的主机名并不记录到系统文件中。 



查看主机名命令 

# uname -n 

qmail.hzhyzg.com 



配置文件 

# cat /etc/sysconfig/network 

NETWORKING=yes 

HOSTNAME=localhost.localdomain 



将HOSTNAME改成设置的主机名,永远生效 



linux下修改主机名

修改主机名:

1./etc/sysconfig/network

内容:

networking=yes

hostname=lh //主机名(没有这行?那就添加这一行吧) 

gateway=192.168.1.1

2.运行命令:

#hostname lh 

//lh为主机名 

3./etc/hosts

内容:

# do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost localhost.localdomain localhost

把第二localhost写为lh,即:

127.0.0.1 lh localhost.localdomain localhost

但是步骤3不是必须的。如果这三个步骤都做了,无论是否重起,

主机名都将修改成功 

在linux 系统中,默认的主机名是loalhost,如果想修改自己的主机名,可以使用命令:hostname xxx。不过如果你正在使用x window窗口,用这个命令修改了主机名之后就打不开xterm了。所以,彻底一点的办法是直接修改/etc/network文件:hostname= xxx,然后重启计算机,主机名已经被修改了。

使用dhcp的系统就不能用上述方法了,因为启动network时主机名会被改成dhcp服务器提供的名称。怎么办呢?既然主机名被粗暴的修改了,那咱们也粗暴的改回来:编辑/etc/rc,在最后加上一行hostname xxx,重启系统就ok了。。



本人参考以上两处,首先更改了/etc/sysconfig/network;然后#hostname landnow,此时可能出现终端打不开的情况,所以也把/etc/hosts文件也更改了。如果主机名称确定以后,建议更改两个文件(即/etc/sysconfig/network,/etc/hosts)后重启,或者更改两个文件后再执行该命令#hostname landnow 注:landnow是我预设的主机名。

linux下mount硬盘步骤,含UUID mount办法

linux下mount步骤

一、建立分区

fdisk -l /dev/emcpowera

fdisk /dev/emcpowera

输入n,p,default,default,建立一个主分区,分给全部空间。

二、建立ext3文件系统

mkfs.ext3 /dev/emcpowera1

[@more@]

三、创建挂载的目录

mkdir /archive

chown oracle:oinstall /archive

四、挂载

挂载分区:mount /dev/emcpowera1 /archive

卸载分区:umount /dev/emcpowera1 /archive

mount 查看各挂载点状态

mount -a 执行fstab中的文件系统的挂载

五、自动挂载

编辑/etc/fstab, 添加要挂载的条目,要使用UUID方式,不要使用设备分区名(如/dev/sdb1),因为有多个磁盘时使用设备分区名可能会挂载错误(如,变换主机Lun映射的顺序,则在Linux上相应的设备分区名会被改变,也即通常所说的盘符漂移。所以要用UUID方式,才能保证设备分区名发生改变时,挂载的设备不发生调换)。

1)、查询需要挂载的磁盘的UUID,使用命令如下:

# blkid

或vol_id 最准确,blkid 要 sudo 才反映新 uuid

相关文件:/etc/blkid.tab

2)、修改/etc/fstab文件,在文件末尾加上:(把/dev/emcpowera1的文件系统mount到目录/archive上)

Redhat系统下添加:

UUID=894d76a6-b175-4eb1-89e5-3fd8d146eab7 /archive ext3 defaults 0 0

第三列(ext3)指定了设备和分区的文件系统格式,可以使用auto”选项简单地表示文件系统格式由系统自动检测

第四列(defaults)列出了对于每一个设备或者分区的所有挂载选项,使用defaults选项与rw,suid,dev,exec,auto,nouser,async等价。



3)、修改系统的启动文件,让系统重启后执行fstab文件参数中的挂载。

Redhat系统:

SMCDB-1:/# vi /etc/rc.d/rc 在文件的末尾行添加“/bin/ mount -a”

/bin/ mount -a 此命令是在系统启动后再去执行fstab中mount

注:/bin/mount –a命令要添加在exit0前面

4)、重新启动Linux后,使用mount查看

#mount

nginx配置SSL证书https可以正常访问http访问400错误

  1. 给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下:

    server {

                listen 80 default backlog=2048;

                listen 443;

                server_name wosign.com;

                root /var/www/html;

                ssl on;

                ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;

                ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .key;

            }

    http访问的时候,报错如下:

    400 Bad Request

    The plain HTTP requset was sent to HTTPS port. Sorry for the inconvenience.

    Please report this message and include the following information to us.

    Thank you very much!

     

    说是http的请求被发送到https的端口上去了,所以才会出现这样的问题。

  2. 2

    server {

                listen 80 default backlog=2048;

                listen 443 ssl;

                server_name wosign.com;

                root /var/www/html;

     

                ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;

                ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .Key;

            }

    把ssl on;这行去掉,ssl写在443端口后面。这样http和https的链接都可以用,完美解决。

centos history显示命令执行时间、执行用户,执行IP

1.在/etc/profile的最后添加如下部分:

USER_IP=`who -u am i 2>/dev/null| awk ‘{print $NF}’|sed -e ‘s/[()]//g’`  
export HISTTIMEFORMAT=”[%F %T][`whoami`][${USER_IP}] ” 

重载:source /etc/profile

export HISTTIMEFORMAT


测试一下:#history 

    1  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
    2  [2016-12-08 22:53:49][root][192.168.1.20] init 3
    3  [2016-12-08 22:53:49][root][192.168.1.20] df
    4  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/resolv.conf 
    5  [2016-12-08 22:53:49][root][192.168.1.20] ll
    6  [2016-12-08 22:53:49][root][192.168.1.20] df
    7  [2016-12-08 22:53:49][root][192.168.1.20] df -h
    8  [2016-12-08 22:53:49][root][192.168.1.20] ll
    9  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   10  [2016-12-08 22:53:49][root][192.168.1.20] netstat -npt
   11  [2016-12-08 22:53:49][root][192.168.1.20] cd /etc/sysconfig/
   12  [2016-12-08 22:53:49][root][192.168.1.20] ll
   13  [2016-12-08 22:53:49][root][192.168.1.20] cd network
   14  [2016-12-08 22:53:49][root][192.168.1.20] cd network-scripts/
   15  [2016-12-08 22:53:49][root][192.168.1.20] ll
   16  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   17  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   18  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/fstab 
   19  [2016-12-08 22:53:49][root][192.168.1.20] \df
   20  [2016-12-08 22:53:49][root][192.168.1.20] df
   21  [2016-12-08 22:53:49][root][192.168.1.20] umount tmpfs
   22  [2016-12-08 22:53:49][root][192.168.1.20] df
   23  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   24  [2016-12-08 22:53:49][root][192.168.1.20] dmesg 
   25  [2016-12-08 22:53:49][root][192.168.1.20] df
   26  [2016-12-08 22:53:49][root][192.168.1.20] ll
   27  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   28  [2016-12-08 22:53:49][root][192.168.1.20] ifup eth0
   29  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   30  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   31  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   32  [2016-12-08 22:53:49][root][192.168.1.20] ifconifg
   33  [2016-12-08 22:53:49][root][192.168.1.20] ls
   34  [2016-12-08 22:53:49][root][192.168.1.20] reboot ;exit
   35  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   36  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   37  [2016-12-08 22:53:49][root][192.168.1.20] dmesg 
   38  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   39  [2016-12-08 22:53:49][root][192.168.1.20] netstat -nlpt
   40  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   41  [2016-12-08 22:53:49][root][192.168.1.20] exit
   42  [2016-12-08 22:53:49][root][192.168.1.20] shutdown -P now
   43  [2016-12-08 22:53:49][root][192.168.1.20] ifconifg
   44  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   45  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.1
   46  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.3
   47  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   48  [2016-12-08 22:53:49][root][192.168.1.20] cd /etc/sysconfig/network-scripts/
   49  [2016-12-08 22:53:49][root][192.168.1.20] ll
   50  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   51  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   52  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   53  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   54  [2016-12-08 22:53:49][root][192.168.1.20] route -a
   55  [2016-12-08 22:53:49][root][192.168.1.20] route -n
   56  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   57  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   58  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   59  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   60  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   61  [2016-12-08 22:53:49][root][192.168.1.20] iptables-save
   62  [2016-12-08 22:53:49][root][192.168.1.20] iptables -F
   63  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   64  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   65  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   66  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   67  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   68  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   69  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   70  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   71  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   72  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   73  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   74  [2016-12-08 22:53:49][root][192.168.1.20] ping 192.168.1.100
   75  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   76  [2016-12-08 22:53:49][root][192.168.1.20] ping v.qq.com
   77  [2016-12-08 22:53:49][root][192.168.1.20] ifconfig
   78  [2016-12-08 22:53:49][root][192.168.1.20] vi ifcfg-eth0 
   79  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/network restart
   80  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   81  [2016-12-08 22:53:49][root][192.168.1.20] dmesg 
   82  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   83  [2016-12-08 22:53:49][root][192.168.1.20] shutdown -p now
   84  [2016-12-08 22:53:49][root][192.168.1.20] shutdown -P now
   85  [2016-12-08 22:53:49][root][192.168.1.20] reboot
   86  [2016-12-08 22:53:49][root][192.168.1.20] df
   87  [2016-12-08 22:53:49][root][192.168.1.20] dmesg 
   88  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   89  [2016-12-08 22:53:49][root][192.168.1.20] netstat -nlpt
   90  [2016-12-08 22:53:49][root][192.168.1.20] cd /usr/local/
   91  [2016-12-08 22:53:49][root][192.168.1.20] ll
   92  [2016-12-08 22:53:49][root][192.168.1.20] rz -dey
   93  [2016-12-08 22:53:49][root][192.168.1.20] yum install -y lrzsz telnet tcpdump traceroute vmstat sysstat rsync mail bind-utils
   94  [2016-12-08 22:53:49][root][192.168.1.20] rz -dey
   95  [2016-12-08 22:53:49][root][192.168.1.20] tar -zxvf services.20160816.tgz 
   96  [2016-12-08 22:53:49][root][192.168.1.20] df -h
   97  [2016-12-08 22:53:49][root][192.168.1.20] ll
   98  [2016-12-08 22:53:49][root][192.168.1.20] w
   99  [2016-12-08 22:53:49][root][192.168.1.20] df -h
  100  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/sysconfig/iptables
  101  [2016-12-08 22:53:49][root][192.168.1.20] /etc/init.d/iptables restart
  102  [2016-12-08 22:53:49][root][192.168.1.20] w
  103  [2016-12-08 22:53:49][root][192.168.1.20] df
  104  [2016-12-08 22:53:49][root][192.168.1.20] df -h
  105  [2016-12-08 22:53:49][root][192.168.1.20] dmesg 
  106  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/profile
  107  [2016-12-08 22:53:49][root][192.168.1.20] exit
  108  [2016-12-08 22:53:49][root][192.168.1.20] history 
  109  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/profile
  110  [2016-12-08 22:53:49][root][192.168.1.20] exit
  111  [2016-12-08 22:53:49][root][192.168.1.20] history 
  112  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/profile
  113  [2016-12-08 22:53:49][root][192.168.1.20] exit
  114  [2016-12-08 22:53:49][root][192.168.1.20] w
  115  [2016-12-08 22:53:49][root][192.168.1.20] history 
  116  [2016-12-08 22:53:49][root][192.168.1.20] vi /etc/profile
  117  [2016-12-08 22:53:49][root][192.168.1.20] exit
  118  [2016-12-08 22:53:50][root][192.168.1.20] history