Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

Linux下用Nginx作Perl程序服务器及其中Perl模块的配置

perl + fastcgi + nginx搭建nginx + fastcgi是php下最流行的一套环境了,那perl会不会也有fastcgi呢,当然有,今天来搭建下nginx下perl的fastcgi.性能方面也不亚于php,但是现在web程序php的流行程度perl无法比拟了,性能再好也枉然,但是部分小功能可以考虑使用perl的fastcgi来搞定.进入正题. 1. 准备软件环境:
apache服务器全局配置详解(全)

apache服务器全局配置详解(全)

Apache服务器全局配置之服务器标识配置篇 服务器标识相关指令:ServerNameServerAdminServerSignatureServerTokensUseCanonicalNameUseCanonicalPhysicalPortServerAdmin和ServerTokens指令控制有关服务器的哪些信息将出现在服务器生成的文档中(如错误消息)。ServerTokens指令设置服务器HTTP响应头字段的值。ServerName、UseCanonicalName、 UseCanonicalPhysicalPort指令用来决定怎样构建自引用URL,譬如,某客户端对一个目录发出请求,但没有包含目录名最后的斜线"/",Apache将重定向客户端到包含"/"的全名,以使客户端可以正确解析文档中的相对引用。ServerName指令语法:ServerName [scheme://] FQDN [:port]这个指令用来设置服务器用于辨识自己的主机名和端口号。主要用于创建重定向URL。例如,你的web服务器的主机名为example.bob.com,但你的web服务器同时在DNS服务器中拥有一个DNS别名www.bob.com。而你希望web服务器更显著一点,你可以在http.conf中使用ServerName指令来实现:ServerName www.bob.com:80当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会监听所有端口。为了加强可靠性和可预测性,应该使用ServerName显示的指定一个主机名和端口号。如果使用的是基于域名的虚拟主机,在<VirtualHost>段中的ServerName将是为了匹配这个虚拟主机,在“Host:”请求头中必须写主机名。ServerAdmin指令语法:ServerAdmin email-address|URL这个指令用来设置服务器返回给客户端的错误信息中包含的管理员邮件地址。便于用户在收到错误信息后能及时与管理员取得联系。
Nginx服务器中配置非80端口的端口转发方法详解

Nginx服务器中配置非80端口的端口转发方法详解

nginx可以很方便的配置成反向代理服务器: 但是如果nginx的监听端口不是默认的80端口,改为其他端口如81端口。 后端服务器中request.getServerPort()无法获得正确的端口,返回的仍然是80; 在response.sendRedirect()时,客户端可能无法获得正确的重定向url。 正确的配置方法下面我们详细来看:
探讨如何减少Linux服务器TIME_WAIT过多的问题

探讨如何减少Linux服务器TIME_WAIT过多的问题

TIME_WAIT状态的意义: 客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?主动关闭的一方在发送最后一个 ack 后就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间,这个是TCP/IP必不可少的,也就是“解决”不了的。也就是TCP/IP设计者本来是这么设计的。主要有两个原因1。防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)2。可靠的关闭TCP连接在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。TIME_WAIT 并不会占用很大资源的,除非受到攻击。在Squid服务器中可输入如下命令:#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'LAST_ACK 14SYN_RECV 348ESTABLISHED 70FIN_WAIT1 229FIN_WAIT2 30CLOSING 33TIME_WAIT 18122状态:描述CLOSED:无连接是活动的或正在进行LISTEN:服务器在等待进入呼叫SYN_RECV:一个连接请求已经到达,等待确认SYN_SENT:应用已经开始,打开一个连接ESTABLISHED:正常数据传输状态FIN_WAIT1:应用说它已经完成FIN_WAIT2:另一边已同意释放ITMED_WAIT:等待所有分组死掉CLOSING:两边同时尝试关闭TIME_WAIT:另一边已初始化一个释放LAST_ACK:等待所有分组死掉也就是说,这条命令可以把当前linux服务器的网络连接状态分类汇总。下面解释一下为啥要这样写:一个简单的管道符连接了netstat和awk命令。先来看看netstat:netstat -nActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。再来看看awk:/^tcp/滤出tcp开头的记录,屏蔽udp, socket等无关记录。state[]相当于定义了一个名叫state的数组NF表示记录的字段数,如上所示的记录,NF等于6$NF表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAITstate[$NF]表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数++state[$NF]表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一END表示在最后阶段要执行的命令for(key in state)遍历数组print key,”t”,state[key]打印数组的键和值,中间用t制表符分割,美化一下。如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vim /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 30然后执行 /sbin/sysctl -p 让参数生效。Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。vi /etc/sysctl.conf增加以下几行:引用net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 1200net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.ip_local_port_range = 1024 65000net.ipv4.tcp_max_syn_backlog = 8192net.ipv4.tcp_max_tw_buckets = 5000说明:net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为 180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效 果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。执行以下命令使配置生效:/sbin/sysctl -p
Ubuntu10.10配置网络

Ubuntu10.10配置网络

有一阵子着实对Ubuntu的网络配置很迷惑,耐下心来仔细上网找了找,有点小心得,总结一下。先说下大概的配置过程,再去细究一些情况。一、配置大概分三类:通过配置文件配置、通过命令配置、通过图形化的网络连接菜单配置。主要文件:/etc/network/interfaces,这里是IP、网关、掩码等的一些配置;/etc/resolv.conf这个文件保存DNS的有关信息主要命令:sudo /etc/init.d/networking restart重启网络,使配置文件的配置失效;sudo route add default gw <IP地址>,设置网关。二、配置方法1、通过命令配置如果你只是想暂时性的修改IP地址,可以选择这种方法。重启网络后会丢失。1)sudo ifconfig eth0 <IP地址> netmask <子网掩码> upeth0是网卡。最后的up表示开启网卡,可以不加。2) sudo route add default gw <网关IP>设置网关3) 设置DNS,这个必须去配置文件修改,同第二种4)配置主机名称命令:sudo /bin/hostname <主机名>但是系统启动时,会从/etc/hostname来读取主机的名称。
Linux目录结构分解及意义和建议

Linux目录结构分解及意义和建议

/root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd samba user1 user2bin --- 系统启动时需要的执行文件(二进制)sbin --- 可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行proc --- 虚拟,存在linux内核镜像;保存所有内核参数以及系统配置信息 1 --- 进程编号usr --- 用户目录,存放用户级的文件 bin --- 几乎所有用户所用命令,另外存在与/bin,/usr/local/bin sbin --- 系统管理员命令,与用户相关,例如,大部分服务器程序 include ---  存放C/C++头文件的目录 lib --- 固定的程序数据 local --- 本地安装软件保存位置 man --- 手工生成的目录 info --- 信息文档 doc --- 不同包文档信息 tmp X11R6 ---  该目录用于保存运行X-Window所需的所有文件。该目录中还包含用于运行GUI要的配置文件和二进制文件。 X386 --- 功能同X11R6,X11 发行版5 的系统文件boot --- 引导加载器所需文件,系统所需图片保存于此lib --- 根文件系统目录下程序和核心模块的公共库 modules --- 可加载模块,系统崩溃后重启所需模块dev --- 设备文件目录etc --- 配置文件 skel --- home目录建立,该目录初始化 sysconfig --- 网络,时间,键盘等配置目录var file lib --- 该目录下的文件在系统运行时,会改变 local --- 安装在/usr/local的程序数据,变化的 lock --- 文件使用特定外设或文件,为其上锁,其他文件暂时不能访问 log --- 记录日志 run --- 系统运行合法信息 spool --- 打印机、邮件、代理服务器等假脱机目录 tmp catman --- 缓存目录mnt --- 临时用于挂载文件系统的地方。一般情况下这个目录是空的,而在我们将要挂载分区时在这个目录下建立目录,再将我们将要访问的设备挂载在这个目录上,这样我们就可访问文件了。tmp --- 临时文件目录,系统启动后的临时文件存放在/var/tmplost+found --- 在文件系统修复时恢复的文件
在CoreOS上搭建一个WordPress程序操作实例

在CoreOS上搭建一个WordPress程序操作实例

CoreOS是一个专门为大规模服务器部署定制的Linux精简系统,它将操作系统和应用程序完全分离,从而降低操作系统和应用程序的耦合度,同时解决了现有Linux服务器在容器资源、权限管理方面出现的问题。就目前来说,CoreOS会是未来操作系统的发展趋势。
linux中 shell 历史命令记录功能

linux中 shell 历史命令记录功能

在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中。通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查,同时在服务器遭受黑客攻击后,也可以查询黑客登录服务器的历史命令操作。但是黑客在入侵后,为了抹除痕迹,会删除 .bash_history 文件,这个就需要合理备份这个文件了。