编译nginx的常见错误

a) PCRE library

./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using –without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using –with-pcre=<path> option.

apt-get install libpcre3 libpcre3-dev

b) C++ Compiler

configure: error: You need a C++ compiler for C++ support.

apt-get install build-essential

c) OpenSSL

./configure: error: the HTTP cache module requires md5 functions from OpenSSL library.  You can either disable the module by using –without-http-cache option, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using –with-http_ssl_module –with-openssl=<path> options.

./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using –with-openssl=<path> option.

sudo apt-get install openssl libssl-dev libperl-dev

d) Xml xslt

./configure: error: the HTTP XSLT module requires the libxml2/libxslt libraries. You can either do not enable the module or install the libraries.

apt-get install libxslt-dev

e) GD Library

./configure: error: the HTTP image filter module requires the GD library. You can either do not enable the module or install the libraries.

apt-get install libgd-dev

f) GeoIP Library

./configure: error: the GeoIP module requires the GeoIP library. You can either do not enable the module or install the library.

apt-get install libgeoip-dev

ubuntu解压命令全览

.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirNamerar请到:http://www.rarsoft.com/download.htm 下载!
解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[[email protected] tmp]# cp rar_static /usr/bin/rar
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName

lha请到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下载!
>解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[[email protected] tmp]# cp lha /usr/bin/
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf –
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName

sEx只是调用相关程序,本身并无压缩、解压功能,请注意!
sEx请到: http://sourceforge.net/projects/sex下载!
解压后请将sEx拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以):
[[email protected] tmp]# cp sEx /usr/bin/

在 Linode 上运行 Windows

自从 Linode 支持 KVM 后,按理说运行 Windows 是可行的,一篇 官方博客 也非常模糊地印证了这一点,因此准备上手折腾一下。

如果在网上搜索,不难找到一些制作好的 RAW 镜像,直接用 dd 把镜像烧录好,把虚拟模式设置为全虚拟后即可顺利启动。然而问题有两个,第一是我不相信别人做好的镜像;第二,也是最重要的一点,这些系统是运行在全虚拟模式下的,性能比半虚拟差一些,尤其是虚拟网卡,全虚拟时是模拟成 Intel 千兆网卡,半虚拟时是 VirtIO 的万兆网卡。具体的差别,请参考 这篇文章。我希望自己制作一个适用于半虚拟模式下的镜像,由于网络带宽小,从本机向云端传输动辄数 GB 的镜像很不实际,因此我尽量用最小的花费把所有涉及大量传输的操作都转移到云端进行,最后还要把镜像打包好方便下次使用。

是否合法

windows-on-linode-1.png

我为此专门开 Ticket 咨询了客服,答案是可以运行,前提是系统必须正版。

准备镜像

我选择把 Linode 开在 Fremont 区,打算用 Los Angeles 区的 Vultr 服务器准备镜像。Vultr 支持从用户自定义的 ISO 启动,给我们提供了很多便利,它最多可以给用户存放两个自定义 ISO,刚好能满足我的需求。

第一个要准备的镜像是 Finnix,这是一个 Linux 环境的装机必备工具集。在 Vlutr 的 ISO 管理页面上,直接添加 http://www.finnix.org/releases/111/finnix-111.iso 即可,Vlutr 会在后台下载这个镜像。

第二个是 Windows 镜像,我安装的是 Windows Server 2012 R2,镜像名en_windows_server_2012_r2_vl_with_update_x64_dvd_4065221.iso,我发现在 Google Drive 上已经有人上传了一份镜像,地址 在这里。此外还需要一份 VirtIO 驱动,地址 在这里,我们需要把驱动解包后放进系统 ISO 内。我的解决方案是直接开一台 Windows 实例,关闭 IE ESC 后直接用浏览器下载系统镜像和驱动,然后集成好驱动后打包好新的 ISO,开启 IIS 把镜像提供给 Vultr。此方法最为迅速简便,从 Google Drive 下载系统镜像的速度可达 60 MB/S,花不了多少时间,而实例每小时收费仅仅是三美分而已,折合只需几毛钱就能解决问题,何乐而不为。

windows-on-linode-2.png

最终需要在 Vultr 上准备好两个自定义镜像。

安装系统

我采用的是在 Vultr 上安装,然后全盘烧录到 Linode 的方法。新建一个 Vultr 实例,选择 10 刀一个月的 SSD 实例即可,选择从自定义 Windows 镜像引导,然后开机,打开 VNC 在上面操作。

文件载入后就进入了 Windows 安装界面了。我选择了带 GUI 的 Server 2012 R2 标准版,接受了许可证之后进入分区界面,因为没有驱动,所以没有认出硬盘。点击加载驱动,分别加载BalloonNetKVMviorngvioscsivioserialviostor 内的驱动,注意不要隐藏不兼容驱动,上面列出的都要加载,否则虽然在 Vultr 上能正常运行,但到了 Linode 上就会报错。

之后如无意外能认出硬盘了,我为了方便,并不希望把引导和系统分开两个分区。因此需要手动分区,Shift + F10 打开黑框框:

1
2
3
4
diskpart
select disk 0
create partition primary
exit

刷新一下,选择已经创建好的分区,点击下一步。此时安装程序开始解包内部的 WIM 镜像,完成后会重启一次从硬盘引导继续安装,这时所有的操作都和 ISO 无关了。我们要做的是,在 WIM 镜像解包完成后重启的时候,在从硬盘引导之前把它拦截下来,对此时的硬盘做镜像。

具体的操作就是,完成解包重启时,VNC 会断开而且不会自动重连,需要马上刷新网页让 VNC 连线,这样用户可以看见虚拟机 POST 的界面,此时会有提示说按 Ctrl + B 进入 iPXE,我们照做,进入后启动过程就被拦截下来了。

接下来在 Vultr 的控制面板上把系统 ISO 卸载下来,这个操作会触发实例重启,如同上一步一样,把启动拦截下来。再在控制面板上把 Finnix ISO 挂载上去,这个操作同样也会触发实例重启,这次选择引导进入 Finnix。

打包系统

上面的实例装了 Windows 已经没有空间了,于是我另开了一个 Vultr 实例来做打包。选择月费 5 刀的储存型即可,系统我选择了 Debian 8,也就用一个小时不到,折算过来一毛钱都不用。

修改 root 密码后,在 Finnix 这边把整个硬盘镜像过去,速度有 25 MB/S 左右。复制 20 GB 的硬盘也就几分钟的事情,我就懒得考虑硬盘末端都是空白内容而无需传输这样的问题了。假设 Linux 实例的 IP 是 1.2.3.4。

1
dd if=/dev/vda | pv | ssh [email protected] "dd of=/root/windows.raw"

而 Linode 上的硬盘是 24 GB 的,为了方便日后部署,我在这个 Linux 实例上先对刚刚获得的 RAW 镜像扩容,这样省得部署好后再扩容。

1
2
fdisk /root/windows.raw
p

确认大小是 20 GB,无误则退出,追加 4 GB 空白到文件末端。

1
dd if=/dev/zero bs=1k count=4194304 >> /root/windows.raw

再用 fdisk 重新划分分区。打开 RAW 镜像,删除分区,再新建分区,基本上保持默认参数即可,分区会占满所有空间。按 t 把新分区类型设置为原本的 7 即 NTFS,按 a 标记 Boot,最后按 w写入更改。

准备 Linode

创建一个 Linode 1024 实例。

新建一个磁盘。

  • 名称 System
  • 容量 24576 MB
  • Type 选择 RAW

新建一个自定义的 Profile。

  • VM Mode 选择 Paravirtualization
  • Kernel 选择 Direct Disk
  • /dev/sda 挂载刚刚创建的 System
  • initrd 选择 No initrd
  • root / boot device 选择 /dev/sda
  • 下方的 Filesystem/Boot Helpers 一律选择 No

同样是因为网速快,我就不考虑复制整个硬盘是不是高效了,反正都是几分钟就能完成的事情。点击上方的 Rescue,把 /dev/sda 挂载为之前创建的 System,然后重启进入恢复模式,这里 Linode 用的也是 Finnix。在 Remote Access 页面打开一个 Lish Console。

1
2
passwd root
service ssh start

修改 root 密码并打开 ssh 服务,至此这个 Linode 已经准备好接受烧录了。

windows-on-linode-3.png

烧录系统

回到那个 Vultr 的 Linux 实例上,用 dd 把 RAW 镜像烧录到 Linode 上。假设 Linode 的 IP 是 4.3.2.1。

1
dd if=/root/windows.raw | pv | ssh [email protected] "dd of=/dev/sda"

 

wget O http://xxx.com/windows2003.32bit.raw | dd of=/dev/sda

因为烧录的是 24 GB 的镜像,完成后 Linode 那边无需额外的扩容操作,直接用刚刚创建的配置重启即可。打开一个 Glish Web Console 就能看见安装程序在 Linode 上继续了,短暂的等待后会再重启一次,之后便可设置管理员密码登录系统了。Glish 并不是那么好用,登录后可能需要配合键盘操作,把远程桌面打开便可。

windows-on-linode-4.png

cmd 上执行 netsh interface ipv6 set global randomizeidentifiers=disabled 即可正常使用 IPv6。

镜像打包

在 Vultr 实例上 tar 压缩即可,RAW 镜像末端都是空白,压缩后占用空间会大幅减少。之后随便装一个 Web 服务器,在本机把压缩好的镜像下载回来即可。

按照此流程部署最快只需要半小时,额外的花费极少,也免去了本机上传大容量镜像的麻烦。

原文地址:https://www.dommyet.me/windows-on-linode#comment-716

ubuntu server kvm虚拟化win2008r2

创建虚拟机的硬盘

qemu-img create -f qcow2 lanni02.img 15G

创建虚拟机

virt-install -n ilanni02 -r 2048 –vcpus=2 –os-type=windows –accelerate -c /iso/windows_server_2008_R2/Win_Server_2008_R2_SP1_33in1.iso –disk path=/iso/virtio-win-0.1-81.iso,device=cdrom –disk path=/vhost/ilanni02.img,format=qcow2,bus=virtio –network bridge=br0 –vnc –vncport=5992 –vnclisten=0.0.0.0 –force –autostart

virt-install –name vm01 –boot network,cdrom,menu=on –ram 1024 –vcpus=1 –os-variant=rhel6 –accelerate –cdrom=/opt/iso/CentOS-6.4-x86_64-bin-DVD1.iso –disk path=/opt/kvmimg/vm01.img,size=5,bus=virtio –bridge=br0,model=virtio –autostart –vnc –vncport=5900 –vnclisten=0.0.0.0

virsh list –all      //可以发现vm01状态时shut off

virsh start vm01      //手动启动vm01

 

克隆虚拟机

我们有时候需要多台虚拟机以满足需求,这时候只要利用vm01克隆出来就行了,过程简单,方便,快速,但是需要做一些改动

1)virsh suspend vm01        //克隆的时候状态必须是非running,之后把suspend换成resume恢复即可

2)virt-clone -o vm01 -n vm02 -f /opt/kvmimg/vm02.img     //克隆vm02

3)virsh edit vm02        //修改vm02.xml文件,因为vm01的vnc已经把5900端口占用所以需要换一下,我这里修改成6900

<graphics type=’vnc’ port=’6900′ autoport=’no’ listen=’0.0.0.0′>

 

常用virsh指令

1)virsh list 列出当前虚拟机列表,不包括未启动的

2)virsh list –all 列出所有虚拟机,包括所有已经定义的虚拟机

3)virsh destroy vm-name 关闭虚拟机

4)virsh start vm-name 启动虚拟机

5)virsh edit vm-name 编辑虚拟机xml文件

6)virsh undefine vm-name 删除虚拟机

7)virsh shutdown vm-name 停止虚拟机

8)virsh reboot vm-name 重启虚拟机

9)virsh autostart vm-name 虚拟机随宿主机启动

 

桥接网络

首先:要停止网络服务

sudo /etc/init.d/networking stop

其次:修改网络配置文件

sudo gedit /etc/network/interfaces

如果想手动设置ip等请将以下代码复制到编辑的文件中,注意:IP等设置自己按照需要修改。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.200.130
network 192.168.200.0
netmask 255.255.255.0
broadcast 192.168.200.255
gateway 192.168.200.1
dns-nameservers 8.8.8.8
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

如果想自动从DHCP获取,请将一下代码复制到编辑的文件中。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0

最后:重新启动网络服务便可

sudo /etc/init.d/networking restart

 

  • 重启指定网卡
# ifdown eth0 && ifup eth0
  • 重启除lo网卡的所有网卡
# ifdown –exclude=lo -a && sudo ifup –exclude=lo -a

新增一块硬盘,并将其驱动更新为SCSI模式。

增加新的网卡

#virsh attach-interface mo_g –type bridge –source br0 ##增加网卡

#virsh detach-interface mo_g bridge –mac 52:54:00:98:92:af ##删除网卡

#virsh domiflist kvmname (kvmname 指虚机名字) ##查看网卡

在ubuntu中mount挂载NTFS分区

ubuntu已经默认安装了ntfs-3g 支持读写ntfs 格式分区,不过建议重要数据储存在ext3格式分区上毕竟linux比windows安全,而且ntfs会产生更多磁盘碎片。

先用fdisk -l 命令查看分区 或用 添加/删除 分区编辑器(安装后在系统-系统管理下看到)查看分区

挂载ntfs分区:
假设/dev/hda1是Windows分区(NTFS)的位置,而要挂载的目录是:/media/windows :

第一行命令为了在media目录下建立一个类似快捷方式的文件

第二行是将硬盘分区挂载到media/windows下
要卸载Windows分区
sudo umount /media/windows/
挂载优盘命令如下:
并且能够正确显示中文:
sudo mkdir /media/U
sudo mount /dev/sda1 /media/U/ -t vfat -o
以下资料是从网上搜集的

mount命令详解
功能:加载指定的文件系统。
语法:mount [-afFhnrvVw] [-L] [-o] [-t] [设备名] [加载点]
用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件
/etc/fastab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。
常用参数和选项:
-a 加载文件/etc/fstab中设置的所有设备。
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
-h 显示在线帮助信息。
-L 加载文件系统标签为的设备。
-n 不将加载信息记录在/etc/mtab文件中。
-o 指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括:
async 以非同步的方式执行文件系统的输入输出动作。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
exec 可执行二进制文件,取消选项为noexec。
noatime 每次存取时不更新inode的存取时间。
noauto 无法使用-a参数来加载。
nodev 不读文件系统上的字符或块设备。
noexec 无法执行二进制文件。
nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
nouser 使一位用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
ro 以只读模式加载。
rw 以可读写模式加载。
suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
sync 以同步方式执行文件系统的输入输出动作。
user 可以让一般用户加载设备。
-r 以只读方式加载设备。
-t 指定设备的文件系统类型。常用的选项说明有:
minix Linux最早使用的文件系统。
ext2 Linux目前的常用文件系统。
msdos MS-DOS 的 FAT。
vfat Win85/98 的 VFAT。
nfs 网络文件系统。
iso9660 CD-ROM光盘的标准文件系统。
ntfs Windows NT的文件系统。
hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。
auto 自动检测文件系统。
-v 执行时显示详细的信息。
-V 显示版本信息。
-w 以可读写模式加载设备,默认设置。
简单用法:
fat32的分区
mount -o codepage=936,iocharset=cp936 /dev/hda7 /mnt/cdrom (mount -t
vfat -o iocharset=cp936 /dev/hda7 /mnt/cdrom)
ntfs的分区
mount -o iocharset=cp936 /dev/hda7 /mnt/cdrom
iso文件
mount -o loop /abc.iso /mnt/cdrom
软盘
mount /dev/fd0 /mnt/floppy
USB闪存
mount /dev/sda1 /mnt/cdrom 说明: /mnt/cdrom 目录必须存在
所有/etc/fstab内容 mount -a
可以指定文件格式”-t 格式”, 格式可以为vfat, ext2, ext3等.
镜像文件:
mount fileName mountPoint -o
loop,fileName是镜像文件名(*.iso,*.img),其它的不用说了,跟上面一样。用例:如我有一个a.iso光盘镜像文件,mount
a.iso a -o loop,这样进入目录a你就能浏览a.iso的内容了,*.img文件的用法一样。
显示中文方面,如果是fedora core 1 的话,用utf8更好
mount -o iocharset=uft8 /dev/hda1 /mnt/c
mount -o iocharset=uft8 /dev/sda1 /mnt/usb
mount -t smbfs //ip_addr/share/dir /mnt/smb/share -o
iocharset=uft8,username=name, password=passwd

开机就mount上windows下的分区
自动将windows的d盘挂到/mnt/d上,用gedit打开/etc/fstab

sudo gedit /etc/fstab

加入以下一行
/dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0
注意,先得手工建立一个/mnt/d目录
sudo mkdir /mnt/d

这样每次开机后就可以自动挂在分区

 

/dev/sda6 /mnt/E ntfs iocharset=utf8,umask=0 0 0
/dev/sda7 /mnt/F ntfs iocharset=utf8,umask=0 0 0
/dev/sda8 /mnt/G ntfs iocharset=utf8,umask=0 0 0

nginx报错accept() failed (24: Too many open files)

查看了一下nginx的error.log日志文件,发现有很多像下面这样的报错:

accept() failed (24: Too many open files)

一看就知道系统对打开文件数目做了限制,用下面命令

ulimit -n    查看当前用户的

命令查看了一下,结果显示文件打开数目限制为1024,我们需要让这个数字更大一些,好让我们的网站访问并发更高一些。

下面是修改 ulimit 限制数的方法:

1.首先你得修改nginx.conf配置文件,在定义error.log日志路径的位置添加一行

worker_rlimit_nofile 65535;

2.在/etc/profile文件最后面添加下面内容

ulimit -n 65535

3.在/etc/security/limits.conf文件最后面添加下面内容

* soft nofile 65535

* hard nofile 65535

*代表所有用户,如果想代表某个用户的话,则user soft nofile 65535

soft代表软连接   hard代表硬限制

查看软限制数量  ulimit -Sn

查看硬限制数量  ulimit -Hn

4.要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中

在/etc/pam.d/login 文件最后面添加下面内容

session required /lib/security/pam_limits.so

或者也可以在/etc/profile后面加上ulimit -n 65535

完成上面操作后,再用在退出当前会话,重新登录ulimit -n 查看文件限制数已经被修改为65535了。我再试了一下打开网站,速度快起来了,已经恢复正常了。观察了几分钟,发现nginx日志也没有此类报错信息了。

解决15年新版openwrt无法pptp内网穿透的问题

使用openwrt做网关路由器,会存在内网windows客户端 PPTP拨号无法连接外网pptp服务器的问题!错误号:619!
PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。
也就是所谓
pptp pass through
PPTP VPN协议 NAT穿透性问题!
参考:LINUX网关后面的pptp vpn客户机连接vpn:
详见:http://www.bizsn.com/info/a/fuwu … 009/0917/15443.html
参考:http://technet.microsoft.com/zh-cn/library/bb877963.aspx

方法:
1、确保安装以下几个ipk包:  kmod-gre kmod-ipt-conntrack-extra kmod-ipt-nat-extra iptables-mod-conntrack-extra

2、防火墙添加以下规则(防火墙默认开放所有端口):
vi /etc/firewall.user:
iptables -t nat -I PREROUTING -p gre -j DNAT

意思是将所有的GRE包转发到pptp client IP 。注意:这个规则在重启防火墙后要过一段时间(2-3分钟)才起作用!

按照openwrt wiki上说的,安装kmod-ipt-nat-extra,可以解决内网多pptp客户端连接问题,未测试!!

 

在/etc/firewall.user添加
## PPTP: forward initiator 1723/tcp
iptables -t nat -A prerouting_wan -p tcp –dport 1723 -j DNAT –to 192.168.4.194
iptables -A forwarding_wan -p tcp –dport 1723 -d 192.168.4.194 -j ACCEPT

## PPTP: forward tunnel GRE traffic
iptables -t nat -A prerouting_wan -p gre -j DNAT –to 192.168.4.194
iptables -A forwarding_wan -p gre -d 192.168.4.194 -j ACCEPT

iptables 添加,删除,查看,修改

iptables是linux系统自带的防火墙,功能强大,学习起来需要一段时间,下面是一些习iptables的时候的记录。如果iptables不熟悉的话可以用apf,是一款基于iptables的防火墙,挺好用的。请参考:linux apf 防火墙 安装 配置

一,安装并启动防火墙

  1. [[email protected] ~]# /etc/init.d/iptables start

当我们用iptables添加规则,保存后,这些规则以文件的形势存在磁盘上的,以centos为例,文件地址是/etc/sysconfig/iptables,我们可以通过命令的方式去添加,修改,删除规则,也可以直接修改/etc/sysconfig/iptables这个文件就行了。

二,添加防火墙规则

1,添加filter表

出口我都是开放的iptables -P OUTPUT ACCEPT,所以出口就没必要在去开放端口了。

2,添加nat表

将源地址是 192.168.10.0/24 的数据包进行地址伪装

3,-A默认是插入到尾部的,可以-I来插入到指定位置

  1. [[email protected] ~]# iptables -I INPUT 3 -p tcp -m tcp –dport 20 -j ACCEPT
  2. [[email protected] ~]# iptables -L -n –line-number
  3. Chain INPUT (policy DROP)
  4. num  target     prot opt source               destination
  5. 1    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0
  6. 2    DROP       icmp —  0.0.0.0/0            0.0.0.0/0           icmp type 8
  7. 3    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:20                //-I指定位置插的
  8. 4    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
  9. 5    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
  10. 6    ACCEPT     all  —  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
  11. 7    DROP       all  —  0.0.0.0/0            0.0.0.0/0           state INVALID,NEW
  12. 8    ACCEPT     tcp  —  0.0.0.0/0            0.0.0.0/0           tcp dpt:21                //-A默认插到最后
  13. Chain FORWARD (policy ACCEPT)
  14. num  target     prot opt source               destination
  15. Chain OUTPUT (policy ACCEPT)
  16. num  target     prot opt source               destination

三,查下iptable规则

1,查看filter表

  1. [[email protected] ~]# iptables -L -n –line-number |grep 21 //–line-number可以显示规则序号,在删除的时候比较方便
  2. 5    ACCEPT     tcp  —  192.168.1.0/24       0.0.0.0/0           tcp dpt:21

如果不加-t的话,默认就是filter表,查看,添加,删除都是的

2,查看nat表

  1. [[email protected] ~]# iptables -t nat -vnL POSTROUTING –line-number
  2. Chain POSTROUTING (policy ACCEPT 38 packets, 2297 bytes)
  3. num   pkts bytes target     prot opt in     out     source               destination
  4. 1        0     0 MASQUERADE  all  —  *      *       192.168.10.0/24      0.0.0.0/0

四,修改规则

  1. [[email protected] ~]# iptables -R INPUT 3 -j DROP    //将规则3改成DROP

五,删除iptables规则

  1. [[email protected] ~]# iptables -D INPUT 3  //删除input的第3条规则
  2. [[email protected] ~]# iptables -t nat -D POSTROUTING 1  //删除nat表中postrouting的第一条规则
  3. [[email protected] ~]# iptables -F INPUT   //清空 filter表INPUT所有规则
  4. [[email protected] ~]# iptables -F    //清空所有规则
  5. [[email protected] ~]# iptables -t nat -F POSTROUTING   //清空nat表POSTROUTING所有规则

六,设置默认规则

  1. [[email protected] ~]# iptables -P INPUT DROP  //设置filter表INPUT默认规则是 DROP

所有添加,删除,修改后都要保存起来,/etc/init.d/iptables save.上面只是一些最基本的操作,要想灵活运用,还要一定时间的实际操作。

ubuntu不小心删除了libc-bin的恢复办法

不小心删除了 libc-bin, 使用apt-get install 命令都会报错,错误如下:

解决办法:

1下载libc-bin扩展包

2复制文件到系统

3修复系统状态

ubuntu搭建LEMP环境,解决 fpm监听失败

1.安装mysql

  1. sudo apt-get install mysql-server mysql-client

安装过程中要输入root用户的密码。

2.安装nginx

  1. sudo apt-get install nginx

2.安装php

   1.  sudo apt-get install php5-fpm php5-cgi php5-mysql php5-fpm php5-curl php5-gd  php-pear php5-imagick php5-imap  php5-memcache   php5-sqlite php5-tidy php5-mongo

这是常用的扩展

一路安装下来后配置nginx

cd  /etc/nginx/ #配置文件默认在此

通过nginx.conf可以看到引入了 sites-available/文件夹下文件,

vi sites-available/default

可以看到这是本地默认的localhost配置,这就是为什么你在nginx.conf里再加入一个localhost的server  nginx会有waring的原因了,因为它已经定义了。

修改default文件为:

server {
listen 80;
listen [::]:80 default_server ipv6only=on;

root /data/www/;

server_name localhost;

location / {
index index.php index.html index.htm;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

}

然后重启nginx和php-fpm

service nginx restart

service php5-fpm restart

在网站根目录编写:

info.php:

<?php

    phpinfo() ;

?>

访问,不成功,查看nginx错误日志,默认是放在/var/log/nginx下

cd /var/log/nginx

tail -fn100  error.log

发现:[error] 15980#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: “GET /info.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “127.0.0.1”

可知是php-fpm的问题

netstat -lnp|grep 9000 (查看9000端口是否被监听)

无内容

解决方法

1 . 按照/etc/php5/fpm/pool.d/www.conf的默认配置使用php5-fpm

# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;

2 . 修改/etc/php5/fpm/pool.d/www.conf里的修改为listen=9000

# # With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm.sock;

重启php-fpm