高手帮我想一个个性车牌吧,我在安徽合肥天气预报,皖A XX-XXX

扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
不积跬步,无以至千里;不积小流,无以成江海我需要它的本身的解释,不要意译的,要直译的;并且需要每一个词的词义和词性(如:以字,x词,表xx,这里是xxx的意思)……;解释要非常准确;最后,整个句子引申出来的意义和道理……
扫二维码下载作业帮
3亿+用户的选择
直译:不积累一步半步的行程,就没有办法达到千里之远;不积累细小的流水,就没有办法汇成江河大海.主要解释一下无以吧———(“无以……”意为“没有用来……的办法”) 以,介词,用来.引申的意义和哲理:不积跬步,无以至千里;不积小流,无以成江海.这是从反面设喻来说明积累的重要.经过反衬的设喻,告诉我们,学习要注意积累,要从小方面做起,点滴积累,就好像成语“集腋成裘,集雨成渠”一样.
为您推荐:
其他类似问题
不积累一步半步的行程,就没有办法达到千里之远;不积累细小的流水,就没有办法汇成江河大海。这话的意思是说千里之路,是靠一步一步地走出来的,没有小步的积累,是不可能走完千里之途的。引申开来,就是做事要脚踏实地,一步一个脚印,不畏艰难,不怕曲折,坚忍不拔地干下去,才能最终达到目的。...
不 积累 小的 步伐,不 可以 到达 千里,不 积累 细小的 流水,不 可以 形成 江河 做事要从小事做起,持之以恒
扫描下载二维码大家帮我看看我这皖A991W9车牌,在合肥值多少钱【合肥吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:989,617贴子:
大家帮我看看我这皖A991W9收藏
大家帮我看看我这皖A991W9车牌,在合肥值多少钱
「天猫11.11」全球狂欢节,领百亿购物津贴,抢800万精品好货,双11抵用上不封顶.天猫祝你双11快乐!
皖AR999R可好
点亮12星座印记,
感觉还不如我的
点亮12星座印记,
废铁一块钱一斤,你这个值个几毛吧
两个加起来应该有一块钱。
智联同城招聘网,专业同城招聘网站,日均350万同城招聘信息,10秒注册,同城找到好工作!
车牌过不了户
车牌不能过户
价值内蒙海景别墅一套。少一块砖都别卖
登录百度帐号推荐应用trackbacks-0
安裝 nginx&CentOS 7 沒有內建的 nginx,所以先到 nginx 官網&&&,找到 CentOS 7 的 nginx-release package 檔案連結,然後如下安裝rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm安裝後,會自動產生 yum 的 repository 設定(在 /etc/yum.repos.d/nginx.repo),&接下來便可以使用 yum 指令安裝 nginxyum install nginx啟動&nginx&以前用 chkconfig 管理服務,CentOS 7 改用&systemctl 管理系統服務&立即啟動systemctl start nginx查看目前運作狀態systemctl status nginx查看 nginx 服務目前的啟動設定systemctl list-unit-files | grep nginx若是 disabled,可以改成開機自動啟動systemctl enable nginx若有設定防火牆,查看防火牆運行狀態,看是否有開啟 nginx 使用的 portfirewall-cmd --state永久開放開啟防火牆的 http 服務firewall-cmd --permanent --zone=public --add-service=httpfirewall-cmd --reload列出防火牆 public 的設定firewall-cmd --list-all --zone=public經過以上設定,應該就可以使用瀏覽器訪問 nginx 的預設頁面。安裝 PHP-FPM&使用 yum 安裝 php、php-fpm、php-mysqlyum install php php-fpm php-mysql查看 php-fpm 服務目前的啟動設定&systemctl list-unit-files | grep php-fpm改成開機自動啟動systemctl enable php-fpm立即啟動systemctl start php-fpm查看目前運作狀態systemctl status php-fpm修改&PHP-FPM listen 的方式&若想將&PHP-FPM listen 的方式,改成 unix socket,可以編輯 /etc/php-fpm.d/www.conf&將listen = 127.0.0.1:9000改成listen = /var/run/php-fpm/php-fpm.sock然後重新啟動 php-fpmsystemctl restart php-fpm註:不要改成 listen = /tmp/php-fcgi.sock (將 php-fcgi.sock 設定在 /tmp 底下), 因為系統產生 php-fcgi.sock 時,會放在 /tmp/systemd-private-*/tmp/php-fpm.sock 隨機私有目錄下, 除非把 /usr/lib/systemd/system/ 裡面的 PrivateTmp=true 設定改成 PrivateTmp=false, 但還是會產生其他問題,所以還是換個位置最方便&删除之前的版本# yum remove php*rpm 安装 Php7 相应的 yum源CentOS/RHEL 7.x:# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -Uvh https:///yum/el7/webtatic-release.rpmCentOS/RHEL 6.x:# rpm -Uvh /yum/el6/latest.rpmyum安装php7yum install php70w php70w-opcache安装其他插件(选装)注:如果安装pear,需要安装php70w-develphp70wphp70w-bcmathphp70w-cliphp70w-commonphp70w-dbaphp70w-develphp70w-embeddedphp70w-enchantphp70w-fpmphp70w-gdphp70w-imapphp70w-interbasephp70w-intlphp70w-ldapphp70w-mbstringphp70w-mcryptphp70w-mysqlphp70w-mysqlndphp70w-odbcphp70w-opcachephp70w-pdophp70w-pdo_dblibphp70w-pearphp70w-pecl-apcuphp70w-pecl-imagickphp70w-pecl-xdebugphp70w-pgsqlphp70w-phpdbgphp70w-processphp70w-pspellphp70w-recodephp70w-snmpphp70w-soapphp70w-tidyphp70w-xmlphp70w-xmlrp编译安装php7配置(configure)、编译(make)、安装(make install)使用configure --help编译安装一定要指定定prefix,这是安装目录,会把所有文件限制在这个目录,卸载时只需要删除那个目录就可以,如果不指定会安装到很多地方,后边删除不方便。Configuration: --cache-file=FILE
cache test results in FILE --help
print this message --no-create
do not create output files --quiet, --silent
do not print `checking...' messages --version
print the version of autoconf that created configure Directory and file names: --prefix=PREFIX
install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX
install architecture-dependent files in EPREFIX注意内存小于1G安装往往会出错,在编译参数后面加上一行内容--disable-fileinfo其他配置参数--exec-prefix=EXEC-PREFIX可以把体系相关的文件安装到一个不同的位置,而不是PREFIX设置的地方.这样做可以比较方便地在不同主机之间共享体系相关的文件--bindir=DIRECTORY为可执行程序声明目录,缺省是 EXEC-PREFIX/bin--datadir=DIRECTORY设置所安装的程序需要的只读文件的目录.缺省是 PREFIX/share--sysconfdir=DIRECTORY用于各种各样配置文件的目录,缺省为 PREFIX/etc--libdir=DIRECTORY库文件和动态装载模块的目录.缺省是 EXEC-PREFIX/lib--includedir=DIRECTORYC 和 C++ 头文件的目录.缺省是 PREFIX/include--docdir=DIRECTORY文档文件,(除 “man(手册页)”以外, 将被安装到这个目录.缺省是 PREFIX/doc--mandir=DIRECTORY随着程序一起带的手册页 将安装到这个目录.在它们相应的manx子目录里. 缺省是PREFIX/man注意: 为了减少对共享安装位置(比如 /usr/local/include) 的污染,configure 自动在 datadir, sysconfdir,includedir, 和 docdir 上附加一个 “/postgresql” 字串, 除非完全展开以后的目录名字已经包含字串 “postgres” 或者 “pgsql”.比如,如果你选择 /usr/local 做前缀,那么 C 的头文件将安装到 /usr/local/include/postgresql, 但是如果前缀是 /opt/postgres,那么它们将 被放进 /opt/postgres/include--with-includes=DIRECTORIESDIRECTORIES 是一系列冒号分隔的目录,这些目录将被加入编译器的头文件 搜索列表中.如果你有一些可选的包(比如 GNU Readline)安装在 非标准位置,你就必须使用这个选项,以及可能还有相应的 --with-libraries 选项.--with-libraries=DIRECTORIESDIRECTORIES 是一系列冒号分隔的目录,这些目录是用于查找库文件的. 如果你有一些包安装在非标准位置,你可能就需要使用这个选项 (以及对应的--with-includes选项)--enable-XXX打开XXX支持--with-XXX制作XXX模块PHP FPM設定參考[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
listen = /var/run/php-fpm/php-fpm.sock
user = www
group = www
pm = dynamic
pm.max_children = 800
pm.start_servers = 200
pm.min_spare_servers = 100
pm.max_spare_servers = 800
pm.max_requests = 4000
rlimit_files = 51200
listen.backlog = 65536
;設 65536 的原因是-1 可能不是unlimited
;說明 http://php.net/manual/en/install.fpm.configuration.php
slowlog = /usr/local/php/var/log/slow.log
request_slowlog_timeout = 10nginx.conf 設定參考&
worker_processes
/var/log/nginx/error.
/var/run/nginx.
worker_connections
worker_rlimit_nofile 65535;
/etc/nginx/mime.
default_type
application/octet-
log_format
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log
/var/log/nginx/access.
tcp_nopush
keepalive_timeout
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
client_body_buffer_size
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_
gzip_min_length
gzip_buffers 32
gzip_http_version
gzip_comp_level
gzip_types
text/css text/xml application/javascript application/atom+xml application/rss+xml text/plain application/
include /etc/nginx/conf.d若出現出現錯誤:setrlimit(RLIMIT_NOFILE, 65535) failed (1: Operation not permitted)&先查看目前系統的設定值ulimit -n若設定值太小,修改 /etc/security/limits.confvi /etc/security/limits.conf加上或修改以下兩行設定* soft nofile 65535
* hard nofile 65535
Alpha 阅读(2176) |
1.关于Tomcat的session数目&
这个可以直接从Tomcat的web管理界面去查看即可&
或者借助于第三方工具Lambda Probe来查看,它相对于Tomcat自带的管理稍微多了点功能,但也不多&
2.监视Tomcat的内存使用情况&
使用JDK自带的jconsole可以比较明了的看到内存的使用情况,线程的状态,当前加载的类的总量等&
JDK自带的jvisualvm可以下载插件(如GC等),可以查看更丰富的信息。如果是分析本地的Tomcat的话,还可以进行内存抽样等,检查每个类的使用情况&
3.打印类的加载情况及对象的回收情况&
这个可以通过配置JVM的启动参数,打印这些信息(到屏幕(默认也会到catalina.log中)或者文件),具体参数如下:&
-XX:+PrintGC:输出形式:[GC 118250K-&0112K), 0.0094143 secs] [Full GC 121376K-&1K), 0.0650971 secs]&
-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K-&781K(9088K), 0.0123035 secs] 118250K-&0112K), 0.0124633 secs] [GC [DefNew: 8614K-&K), 0.0000665 secs][Tenured: 112761K-&1K), 0.0433488 secs] 121376K-&1K), 0.0436268 secs]&
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用,输出形式:11.851: [GC 98328K-&9K), 0.0082960 secs]&
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用。输出形式:Application time: 0.5291524 seconds&
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间。可与上面混合使用。输出形式:Total time for which application threads were stopped: 0.0468229 seconds&
-XX:PrintHeapAtGC: 打印GC前后的详细堆栈信息&
-Xloggc:filename:与上面几个配合使用,把相关日志信息记录到文件以便分析&
-verbose:class 监视加载的类的情况&
-verbose:gc 在虚拟机发生内存回收时在输出设备显示信息&
-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息&
4.添加JMS远程监控&
对于部署在局域网内其它机器上的Tomcat,可以打开JMX监控端口,局域网其它机器就可以通过这个端口查看一些常用的参数(但一些比较复杂的功能不支持),同样是在JVM启动参数中配置即可,配置如下:&
-Dcom.sun.management.jmxremote.ssl=false& -Dcom.sun.management.jmxremote.authenticate=false&
-Djava.rmi.server.hostname=192.168.71.38 设置JVM的JMS监控监听的IP地址,主要是为了防止错误的监听成127.0.0.1这个内网地址&
-Dcom.sun.management.jmxremote.port=1090 设置JVM的JMS监控的端口&
-Dcom.sun.management.jmxremote.ssl=false 设置JVM的JMS监控不实用SSL&
-Dcom.sun.management.jmxremote.authenticate=false 设置JVM的JMS监控不需要认证&
5.专业点的分析工具有&
IBM ISA,JProfiler等,具体监控及分析方式去网上搜索即可。&
单个Tomcat的处理性能是有限的,当并发量较大的时候,就需要有部署多套来进行负载均衡了。&
集群的关键点有以下几点:&
1.引入负载端&
软负载可以使用nginx或者apache来进行,主要是使用一个分发的功能&
/blog/1715312(nginx负载)&
/blog/1717121(apache负载)&
2.共享session处理&
目前的处理方式有如下几种:&
1).使用Tomcat本身的Session复制功能&
参考/blog/1715312(Session复制的配置)&
方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率&
2).使用第三方来存放共享Session&
目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行Tomcat的Session管理&
参考/blog/1716320(使用MSM管理Tomcat集群session)&
3).使用黏性session的策略&
对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的session sticky策略,目前应用也比较多&
参考:/blog/1848665(tomcat session sticky)&
nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译)&
优点是处理效率高多了,缺点是强会话要求的场合不合适&
以上是实现集群的要点,其中1和2可以组合使用,具体场景具体分析吧~
Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。针对JVM的优化目前主要在两个方面:&
1.内存调优&
内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。&
具体设置如下:&
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"&
其各项参数如下:&
-Xmx3550m:设置JVM最大可用内存为3550M。&
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。&
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。&
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在左右。&
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5&
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6&
-XX:MaxPermSize=16m:设置持久代大小为16m。&
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。&
2.垃圾回收策略调优&
垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。&
具体设置如下:&
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC& -XX:MaxGCPauseMillis=100"&
具体的垃圾回收策略及相应策略的各项参数如下:&
串行收集器(JDK1.5以前主要的回收方式)&
-XX:+UseSerialGC:设置串行收集器&
并行收集器(吞吐量优先)&
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC& -XX:MaxGCPauseMillis=100&
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。&
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。&
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集&
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。&
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。&
并发收集器(响应时间优先)&
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC&
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。&
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。&
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。&
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片&
在内存设置中需要做一下权衡&
1)内存越大,一般情况下处理的效率也越高,但同时在做垃圾回收的时候所需要的时间也就越长,在这段时间内的处理效率是必然要受影响的。&
2)在大多数的网络文章中都推荐 Xmx和Xms设置为一致,说是避免频繁的回收,这个在测试的时候没有看到明显的效果,内存的占用情况基本都是锯齿状的效果,所以这个还要根据实际情况来定。
Server.xml的Connection优化
Tomcat的Connector是Tomcat接收HTTP请求的关键模块,我们可以配置它来指定IO模式,以及处理通过这个Connector接受到的请求的处理线程数以及其它一些常用的HTTP策略。其主要配置参数如下:&
1.指定使用NIO模型来接受HTTP请求&
protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型来接受HTTP请求。默认是BlockingIO,配置为protocol="HTTP/1.1"&
acceptorThreadCount="2" 使用NIO模型时接收线程的数目&
2.指定使用线程池来处理HTTP请求&
首先要配置一个线程池来处理请求(与Connector是平级的,多个Connector可以使用同一个线程池来处理请求)&
&Executor name="tomcatThreadPool" namePrefix="catalina-exec-"&
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/&&
&Connector port="8080"
executor="tomcatThreadPool" 指定使用的线程池&
3.指定BlockingIO模式下的处理线程数目&
maxThreads="150"//Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。&
minSpareThreads="25"---Tomcat初始化时创建的线程数。默认值4。如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。Tomcat初始化时创建的线程数量也由此值设置。&
maxSpareThreads="75"--一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。一旦创建的线程超过此数值,Tomcat会关闭不再需要的线程。线程数可以大致上用 “同时在线人数*每秒用户操作次数*系统平均操作时间” 来计算。&
acceptCount="100"----指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。如果当前可用线程数为0,则将请求放入处理队列中。这个值限定了请求队列的大小,超过这个数值的请求将不予处理。&
connectionTimeout="20000" --网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。&
4.其它常用设置&
maxHttpHeaderSize="8192" http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。&
URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。&
disableUploadTimeout="true" 上传时是否使用超时机制&
enableLookups="false"--是否反查域名,默认值为true。为了提高处理能力,应设置为false&
compression="on"&& 打开压缩功能&
compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB&
noCompressionUserAgents="gozilla, traviata"&& 对于以下的浏览器,不启用压缩&
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩&
关于Tomcat的Nio和ThreadPool,本身的引入就提高了处理的复杂性,所以对于效率的提高有多少,需要实际验证一下。&
6.配置示例&
&Connector port="8080"&
redirectPort="8443"
maxThreads="150"&
minSpareThreads="25"&
maxSpareThreads="75"&
acceptCount="100"&
connectionTimeout="20000"&
protocol="HTTP/1.1"&
maxHttpHeaderSize="8192"&
URIEncoding="UTF-8"&
disableUploadTimeout="true"&
enableLookups="false"&
compression="on"&
compressionMinSize="10240"&
noCompressionUserAgents="gozilla, traviata"&
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"&&
&/Connector&
管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。
&!-- &Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /& --&默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。修改实例:
&Host name="localhost"
appBase=""
unpackWARs="false" autoDeploy="false"&
Alpha 阅读(1329) |
&&&& 摘要: 最新的版本可以在这里获取,目前下载的最新版本是5.08,更新于。在这里可以找到更多的说明。
  下载好后,server端分为两个部分,一个是tracker,一个是storage。顾名思义,前者调度管理,负载均衡,后者则是实际的存储节点。两个都能做成集群,以防止单点故障。以前的4.x版本依赖libevent,现在不需要了,只需要libfastcommon。安装方法如下:
1....&&
Alpha 阅读(1924) |
&&&& 摘要: 1.第一步需要安装PPTP,以用来提供VPN服务.
sudo&apt-get&install&pptpd
Alpha 阅读(253) |
1.#&rpm&-Uvh&http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm&2. yum&install&pptpd&3.配置pptp.首先我们要编辑/etc/pptpd.conf文件:#vim /etc/pptpd.conf找到”locapip”和”remoteip”这两个配置项,将前面的”;”注释符去掉,更改为你期望的IP段值.localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间.这里我们使用pptp默认的配置:localip 192.168.0.1remoteip 192.168.0.234-238,192.168.0.245注意,这里的IP段设置,将直接影响后面的iptables规则添加命令.请注意匹配的正确性,如果你嫌麻烦,建议就用本文的配置,就可以一直复制命令和文本使用了.4.接下来我们再编辑/etc/ppp/options.pptpd文件,为VPN添加Google DNS:#vim /etc/ppp/options.pptpd在末尾添加下面两行:ms-dns 8.8.8.8ms-dns 8.8.4.45、设置pptp VPN账号密码.我们需要编辑/etc/ppp/chap-secrets这个文件:#vim /etc/ppp/chap-secrets在这个文件里面,按照”用户名 pptpd 密码 *”的形式编写,一行一个账号和密码.比如添加用户名为test,密码为1234的用户,则编辑如下内容:test pptpd 1234 *6、修改内核设置,使其支持转发.编辑/etc/sysctl.conf文件:#vim /etc/sysctl.conf将”net.ipv4.ip_forward”改为1,变成下面的形式.net.ipv4.ip_forward=1保存退出,并执行下面的命令来生效它:#sysctl -p7、添加iptables转发规则.经过前面的6个步骤,我们的VPN已经可以拨号了,但是还不能访问任何网页.最后一步就是添加iptables转发规则了,输入下面的指令:#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE需要注意的是,这个指令中的&#.0.0/24″是根据之前的配置文件中的”localip”网段来改变的,比如你设置的&#.0.1″网段,则应该改为&#.0.0/24″.此外还有一点需要注意的是eth0,如果你的外网网卡不是eth0,而是eth1(比如SoftLayer的服务器就是这样的情况),那么请记得将eth0也更改为对应的网卡编号,不然是上不了网的.然后我们输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加:#/etc/init.d/iptables save然后我们重启iptables:#/etc/init.d/iptables restart8、重启pptp服务.输入下面的指令重启pptp:#/etc/init.d/pptpd restart现在你已经可以连接自己的VPN并浏览网页了.不过我们还需要做最后的一步.9、设置开机自动运行服务.我们最后一步是将pptp和iptables设置为开机自动运行,这样就不需要每次重启服务器后手动启动服务了,当然你不需要自动启动服务的话可以忽略这一步,输入指令:#chkconfig pptpd on#chkconfig iptables on这样就大功告成了,赶快到Windows下建立一个VPN连接,IP填写自己的服务器IP,用户名和密码填写自己设置好的用户名和密码,点击”连接”,成功后就可以使用服务器去浏览网页啦.备注:多ip服务器转发指定规则iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 192.168.8.1oriptables -t nat -A POSTROUTING -s 192.168.8.0/24 -j SNAT --to-source 服务器外网ip如果iphone之类的设备能连上,访问网页或者youtube特别慢,需要做如下修改:vi /etc/ppp/ip-up增加一行/sbin/ifconfig $1 mtu 1400或者修改iptables规则iptables -A FORWARD -p tcp --syn -s 192.168.8.0/24 -j TCPMSS --set-mss 13561356的值可能需要自己调整,调节到能保证网络正常使用情况下的最大值
Alpha 阅读(219) |
&&&& 摘要: 关于IP Tables在初始化设置系统后,为了让系统更安全,Ubuntu把Iptabls作为发行版的默认防火墙。起初,尽管Ubuntu防火墙已经被配置了,但是它设置为通过一个虚拟主机允许所有的进入与流出流量。要打开服务器上某些更强的保护功能,我们需要在IP Table山增加一些基础的规则。IP Table 规则来自于一系列可以组合起来创建各自的特定的处理方法的选项。每一个通过防火墙的包被所有的规则...&&
Alpha 阅读(1441) |
我有一个阿里云9折推荐码:LST2RY,分享给大家免费使用,第一次购买云服务器或云数据库可享受原价9折优惠,还可多人使用,拿走不谢。
购买可以用阿里云主机推荐码:LST2RY
或提交订单时手动输入阿里云优惠码:&LST2RY ,马上可享受9折优惠,购买阿里云主机马上给你省钱!
阿里云他们自己是这样介绍他们的产品的:
返利所得阿里云代金券使用范围:
可购买产品:云服务器ECS、云数据库RDS、负载均衡SLB开放存储服务OSS、 内容分发网络CDN、开放缓存服务OCS
购买行为:新购、续费
返利所得代金券可转让给他人使用
1、阿里云推荐码使用规则?
& & & 适用订单:首次购买包年包月云服务器ECS和云数据库RDS的订单
& & & 优惠折扣:享受原价9折优惠。
& & & 有效期: 推荐码限量限时,请尽快使用。
& & (其中分销商关联账号、已打折订单、企业子账户不在使用范围。)
2、如何使用阿里云推荐码?
选好产品-&立即购买-&确认订单环节-&点击「我有推荐码」-&输入推荐码-&立享9折!
买阿里云主机用阿里云推荐码:LST2RY ,提交订单时手动输入 LST2RY ,永久免费使用,长期有效.
购买阿里云服务器ECS、云数据库RDS、负载均衡SLB开放存储服务OSS、 内容分发网络CDN、开放缓存服务OCS 用阿里云推荐码立即省钱!
Alpha 阅读(384) |
安装 MySQL 5 数据库
安装 MySQL 运行命令:
sudo&apt-get install mysql-server mysql-client
将mysql的datadir从默认的/var/lib/mysql 移到/app/data/mysql下,操作如下:
1.修改了/etc/f,改为:datadir = /app/data/mysql
2.cp -a /var/lib/mysql /app/data/
3./etc/init.d/mysql start
如果出现系统报错,无法启动mysql,日志显示为:Can't find file: "./mysql/plugin.frm'(errno:13)
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
修改系统的chroot,需要修改/etc/apparmor.d下的相关文件,这里以mysql为例,需要修改:usr.sbin.mysqld和abstractions/mysql两个文件。
1.修改usr.sbin.mysqld里面的两行内容:/var/lib/mysql/ r,改为:/app/data/mysql/ r,/var/lib/mysql/** rwk,改为:/app/data/mysql/** rwk,
2.修改abstractions/mysql中一行:/var/lib/mysql/mysql.sock rw,改为:/app/data/mysql/mysql.sock rw,
3.重新加载apparmor服务:/etc/init.d/apparmor reload
安装 Nginx
在安装 Nginx 之前,如果你已经安装 Apache2 先删除在安装 nginx:
service apache2 stop
update-rc.d -f apache2 remove
sudo&apt-get remove apache2
sudo&apt-get install nginx
我们必须通过&&才能让PHP5正常工作,安装命令:
sudo&apt-get install php5-fpm
php-fpm是一个守护进程。
安装mysql和GD扩展
sudo apt-get install php5-gd libapache2-mod-auth-mysql php5-mysql openssl&libssl-dev
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
可以通过访问Oracle官网下载,或者直接通过命令行下载。
lxh@ubuntu:~$&wget&-c&/otn-pub/java/jdk/8u11-b12/jdk-8u25-linux-x64.tar.gz
lxh@ubuntu:~$&mkdir&-p&/usr/lib/jvm
lxh@ubuntu:~$&sudo&mv&jdk-8u25-linux-x64.tar.gz&/usr/lib/jvm
lxh@ubuntu:~$&cd&/usr/lib/jvm
lxh@ubuntu:~$&sudo&tar&xzvf&jdk-8u25-linux-x64.tar.gz
在系统中添加环境变量,主要是PATH、CLASSPATH和JAVA_HOME。
lxh@ubuntu:~$&sudo vim ~/.profile
在文件最后加入
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25/
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_25/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
保存退出,并通过命令使脚本生效:
lxh@ubuntu:~$&$source ~/.profile
配置默认JDK版本
在有的系统中会预装OpenJDK,系统默认使用的是这个,而不是刚才装的。所以这一步是通知系统使用Oracle的JDK,非OpenJDK。
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_25/bin/javac 300
sudo update-alternatives --config java
因为我是在虚拟机中安装的Ubuntu 14.04,默认不安装OpenJDK,所以没有需要选择的JDK版本。如果是在物理机上安装的Ubuntu版本,会出现几个候选项,可用于替换 java (提供 /usr/bin/java)。
====================================
编译安装nginx&
1. 下载最新版nginx
$ ./configure &#检查编译前置条件
$ make &#编译
$ sudo make install &#使用sudo权限进行安装
安装后路径在&/usr/local/启动nginx /usr/local/nginx/sbin/nginx
1)使用在 /etc/init.d/ 目录下创建名为 nginx 文件,注意没有后缀名,将以下内容复制到该文件中(感谢提供脚本的兄弟)。
&1&#!&/bin/sh
&2&#用来将Nginx注册为系统服务的脚本
&3&#Author&CplusHua
&4&#http://www.219.me
&5&#chkconfig:&-&85&15
&7&PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
&8&DESC="Nginx&Daemon"
&9&NAME=nginx
<span style="color: #&DAEMON=/usr/local/nginx/sbin/$NAME
<span style="color: #&SCRIPTNAME=/etc/init.d/$NAME
<span style="color: #&#守护进程不存在就退出
<span style="color: #&test&-x&$DAEMON&||exit&0
<span style="color: #&d_start(){
<span style="color: #&&&$DAEMON&||echo&-n&"aready&running"
<span style="color: #&}
<span style="color: #&d_stop(){
<span style="color: #&&&$DAEMON&-s&quit&||&echo&-n&"not&running"
<span style="color: #&}
<span style="color: #&d_reload(){
<span style="color: #&&&$DAEMON&-s&reload&||&echo&-n&"could&not&reload"
<span style="color: #&}
<span style="color: #&case&"$1"&in
<span style="color: #&&&start)
<span style="color: #&&&&&echo&-n&"Starting&$DESC:&$NAME"
<span style="color: #&&&&&d_start
<span style="color: #&&&&&echo&"."
<span style="color: #&&&;;
<span style="color: #&&&stop)
<span style="color: #&&&&&echo&-n&"Stopping&$DESC:&$NAME"
<span style="color: #&&&&&d_stop
<span style="color: #&&&&&echo&"."
<span style="color: #&&&;;
<span style="color: #&&&reload)
<span style="color: #&&&&&echo&-n&"Reloading&$DESC:&configurationg.."
<span style="color: #&&&&&d_reload
<span style="color: #&&&&&echo&"reloaded."
<span style="color: #&&&;;
<span style="color: #&&&restart)
<span style="color: #&&&&&echo&-n&"Restarting&$DESC:&$NAME"
<span style="color: #&&&&&d_stop
<span style="color: #&&&&&sleep&3
<span style="color: #&&&&&d_start
<span style="color: #&&&&&echo&"."
<span style="color: #&&&;;
<span style="color: #&&&*)
<span style="color: #&&&&&echo&"Usage:&$SCRIPTNAME&{start|stop|restart|reload}"&&&2
<span style="color: #&&&&&exit&3
<span style="color: #&&&;;
<span style="color: #&esac
<span style="color: #&
<span style="color: #&exit&0
2)添加权限 &&&&$ sudo chmod +x nginx
3)服务方式启动 如果配置服务前已启动,执行以下命令停止Nginx。 &&&&$ sudo service nginx stop 4)启动Nginx &&&&$ sudo service nginx start
pastingnginx出现connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied)的错误 处理方式是:编辑/etc/php5/fpm/pool.d/www.conf文件,将以下的注释去掉:
&&&&listen.owner = www-data
&&&&listen.group = www-data
&&&&listen.mode = 0660
然后重启php5-fpm
&&&&$ sudo service php5-fpm restart
Ubuntu 14.04快速搭建SVN服务器及日常使用 SVN相关命令了解
svn:命令行客户端
&&&&svnadmin:用来创建、调整或修复版本库的工具
&&&&svnserve:svn服务程序
&&&&svndumpfilter:过滤svn版本库转储数据流的工具
&&&&svnsync:svn数据同步工具,实现另外存一份相同的
&&&&svnlook:用来查看办本科中不同的修订版和事务
&&&&# apt-get install subversion
创建版本库
&&&&# sudo mkdir /app/svn
&&&&# sudo svnadmin create /app/svn/prj
配置版本库
& # sudo vi svnserve.conf& #将以下参数去掉注释&
& [general]&
& anon-access = none& & #匿名访问权限,默认read,none为不允许访问&
& auth-access = write& #认证用户权限&&
& password-db = passwd& #用户信息存放文件,默认在版本库/conf下面,也可以绝对路径指定文件位置&
& authz-db = authz
& # sudo vi passwd& & #格式是用户名=密码,采用明文密码&
& [users]&
& xiaoming = 123&
& zhangsan = 123&
&& lisi = 123
# sudo vi authz&&
& [groups]& & & & & #定义组的用户&
& manager = xiaoming&
& core_dev = zhangsan,lisi&
& [repos:/]& & & & & #以根目录起始的repos版本库manager组为读写权限&
& &#64;manager = rw&
& [repos:/media]& & #core_dev对repos版本库下media目录为读写权限&
& &#64;core_dev = rw
&启动svn服务
& # sudo svnserve -d -r /app/svn
& # 查看是否启动成功,可看的监听3690端口
& # sudo netstat -antp |grep svnserve
& tcp& & 0& & & 0 0.0.0.0:3690& & 0.0.0.0:*& & & LISTEN& & 28967/svnserve&
& # 如果想关闭服务,可使用pkill svnserve
& # 访问repos版本库地址
& svn://192.168.1.100/prj
备份与恢复
&& svnadmin dump备份
& # 完整备份
& svnadmin dump /app/svn/prj & YYmmdd_fully_backup.svn
& # 完整压缩备份
& svnadmin dump /app/svn/prj | gzip & YYmmdd_fully_backup.gz
& # 备份恢复
& svnadmin load /app/svn/prj & YYmmdd_fully_backup.svn
& zcat YYmmdd_fully_backup.gz | svnadmin load repos
& ### 增量备份 ###
& # 先完整备份
& svnadmin dump /app/svn/prj -r 0:100 & YYmmdd_incremental_backup.svn
& # 再增量备份
& svnadmin dump /app/svn/prj -r 101:200 --incremental & YYmmdd_incremental_backup.svn
svnadmin hotcopy备份
& svnadmin hotcopy /app/svn/prj YYmmdd_fully_backup --clean-logs
& svnadmin hotcopy YYmmdd_fully_backup /app/svn/prj
Tomcat 内存优化
Linux下修改JVM内存大小
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128m"
cygwin=false
Alpha 阅读(434) |
我本身是 Java 工程师出身,写代码至今已超过 15 年,创业也超过 10 年,曾经外包过很多项目给别人,也接过很多外包的项目,现在不接了,只经营电子报发送平台,在二年内累积超过 5000 家企业用户使用。身处在创业圈,只要有创业朋友主动问过我的,我都会和他说如果你能不接就不要接 ( 当然我也知道,如果不是为了活下去,谁愿意接 ? ),因为这其中有太多陷阱,我分享如下给大家作个参考:&因为你写代码很快&通常会出来接私活的工程师大多是有些年资,也会有自己擅常的工具及 library,所以往往可以很快完成主管交代的工作,会认为客户的需求只要能在很短的时间内完成,这个项目就赚钱了。&【BUT】项目完成的快慢取决于客户的心情,只要他心情不好,就慢慢拖吧。你以为你的 Code 可以 reuse,最后你才发现真正被 reuse 的是你的肝。&因为你写代码很快,所以只要客户比价、杀价、压你结案时间,你就会心里想一下:嗯,只要我努力赶一下,应该没问题。&【BUT】,无形中你就牺牲了你的利润空间,只有赚到微利,你知道工程师估完成时间的准确率有多少吗 ? 准确率有多高,赚到微利的机率就有多高。&因为你可以赚每年的维护费&接私活是这样,只要你接了,之后的维护客户也很难不找你维护,只要慢慢的累积,每年都会有可观的维护费可以赚。&【BUT】,你知道大部份台湾公司有个不成文规定,同一套系统的维护费预算是每年递减的,客户会想:系统每年调整也该稳定了吧,都稳定了你也没作什么事为什么还要拿这么多钱 ? 接下来,你可能会想说如果客户想加新功能第一个一定先找你,试想一下,叫你照着三年前自己写的代码架构来新增功能,如果没有吐血,大概代表这三年你也没什么长进。不接总行吧 ? 偏偏你就这么有责任感,你不接客户也只能打掉重来请别人重新作一套,你忍心吗 ? 所以你觉得这维护费好赚吗?&因为你很能为客户着想&你因为很为公司着想,常常在开发过程中发现缺了什么或是主管规划错了,你会主动的加班把这些缺的部份补上调好,公司对你赞誉有加,如果接私活的时候以这样的态度来对待自己的客户,那双方合作的感觉一定很好。&【BUT】,你的客户当然好啊,因为你主动帮他加功能把系统调的更好,都不用再花钱啊。加钱 ? 合约当初就签好了,如何告诉客户要加钱 ? 况且这是你自己主动要加功能的。可以不加吗 ? 可以啊,但你可以忍受你的作品明明可以更好的而不让它更好吗 ? 如果是当初规划就错了,不调整能验收吗 ?&因为你知道客户要什么&因为在公司时主管常常也语无伦次,但你总是能分析出主管要的是什么,你也都能完成它,所以接私活时就算对方不懂技术,你也能完成他需要的功能。&【BUT】,你知道客户要的是什么吗 ? 不,你不知道,因为绝大部份客户自己要什么都不知道,而且你知道客户的上面还有老板吗 ? 你知道客户的老板要的是什么吗 ? 不,你不会知道,因为连他老板自己都不知道,这是最可怕的吗 ? 不,还有更可怕的,他们会告诉你他们知道想要的功能是什么,但你就是无法作出他们想要的。&因为你很能规划&你是个逻辑观念很好的人,只要主管告诉你他的需求,你可以很快画出系统架构图、代码架构图甚至是资料库架构图,准确率非常高,所以接私活的时候只要客户告诉你需求,你很快脑中就会出现各种架构图雏形。&【BUT】,你知道规格是谁开的吗 ? 对,是客户开的,因为他不开你就无法报价,如果他要你开,你也怕开完后报价他不接受就等于作白工了。那你觉得客户的逻辑会有你好吗 ? 所以通常你要作的是先了解客户的逻辑,然后找出矛盾的地方,然后提出更好的解决方桉,这一段来来回回就要花不少时间了,喔对,这一段通常是收不到钱的,客户会觉得你要接我的项目,你本来就要先来了解我的需求。&因为你有团队&因为你在业界有一定的人脉了,自己会写代码,再找个业务高手、美编高手,这样最小单位就好,大家可以分工,这样接私活的问题就变少、进行更顺利。&【BUT】,因为你有三个人,所以你只能接可以养活 &= 3 个人的项目,这种项目通常会稍大一点,因为以上所述种种原因会造成结案很慢,如果不结案人卡在这个项目拿不到钱,新的项目接不了,怎么办 ? 对,加人,所以你的团队变成了 4 个人,接下来你只能接可以养活 &= 4 个人的项目,这个时候如果来了个大项目呢 ? 对,你会陷入无限迴圈,直到你再也接不到更大的项目。&因为你想用客户的项目来练兵&正如阿甘说的:人生就像一盒巧克力,你永远不知道下一个会是什么口味。所以你永远不知道下一个项目在那里,但当你开始有了团队,每个月都要付薪水时,这时来一个不大不小的项目,反正也不知道下一个项目何时进来,这个刚好可以付团队薪水又可以拿来练兵,这也蛮好的。&【BUT】,接私活有个特性是你接了这个项目就会降低接下个项目的能力,因为人力及时间总是有限,如果你因为接了一个小项目造成大项目没人力接,你说大家气不气 ? 不幸这个小项目的业主特别麻烦 (基于上述原因,你知道这机率还不小),那你磨练团队的可不是他们的技术,你磨练的可是大家的身心灵啊,慢慢的就会有一股将相无能,累死三军的声音传出来了 &#8230; 你为何不自己开发个小产品来练兵呢 ?&因为你应对客户有一套&你的个性很好,以前在公司的时候都可以和厂商或客户相处很好,可以接的接,不可以接的也会挡,如果出来接私活和客户应对对不会有问题。&【BUT】,客户百百款,你对客户有一套,客户对你可是有好几套,他可以议价、杀价、压时间、加功能、拖验收、会计不见、老板出国 &#8230;..,最后怪你为何拖这么久再扣你一笔钱,说了一句:你们不是专业的吗 ? 开发阶段你们是朋友,验收阶段你们就变甲乙双方。&因为你从来不缺客户&你从来不需要自己去陌生开发,客户都是透过朋友介绍或是客户转介绍来的,这比一般公司好太多了,别人想要客户都还没有呢。&【BUT】,你有没有想过,你有上面所述种种优点,重点是你还比别人便宜,别人不找你,我都想找你了。所以你赚到钱了吗 ?&因为你都有签合约&为了避免以上不必要的问题,每个项目你一定都会签合约保护双方,凡事照合约走就没问题了。&【BUT】,对方有法务你有吗 ? 对方有钱你有吗 ? 真正要打官司你打的起吗 ? 你真的有把握合作过程中你完全没错 ? 合约里有办法规范到所有的功能细节、操作流程 ? 合约订了一大本,你客户会和你签 ? 所以,你真的能照合约走吗 ?&你最近一次开心写代码是什么时候&在我和你有一样能力的时候,我曾经说过一句话:我希望我死前的最后一个动作是按下 【Enter】,我写代码的动力不是赚钱 ( 当然赚钱很重要,但如果只是赚钱,我大可去作直销、卖保险、到大公司上班 &#8230; ),精准来说不只是赚钱,我的动力来源来自于我写出来的代码可以让非常多人使用,真正帮助到很多人,而且很多人都说好。( 相信我,如果你真的作到这一点,其实你也赚到钱了 )&但自从我接私活之后,我最多只能帮助到我有限的客户,说精准一点也许就只有真正使用系统的某些人,也只有这些人会说我好,其它人也只会认为那是你该作的,但只要最后验收时他离职了、他生气了、一切努力就没了。所以那时我只有二个时候点是开心的,一个是收到订金、另一个是收到尾款,中间一大段时间是痛苦的,当同时多个项目进行,其实所有时间都是痛苦的。我还记得我那时常说的一句话:收到你冷冷的支票,我的心就觉得暖暖的。&当然一定有人接私活接的很好,只是别人的成功很难複制,但别人的失败可以避免,如果你能避掉我以上所说的陷阱也无法保证你能成功,因为这也只是冰山一角,我已经离开接私活的状态很久,很多事忘了也不想去想,只是希望你在决定接私活前,仔细想一下,你真的只有接私活这个选项吗 ? 如果可以,我会建议你应该要开发自己的产品及服务。&来自:&
Alpha 阅读(2065) |
fn:contains 判断字符串是否包含另外一个字符串 &c:if test="${fn:contains(name, searchString)}"&
fn:containsIgnoreCase 判断字符串是否包含另外一个字符串(大小写无关) &c:if test="${fn:containsIgnoreCase(name, searchString)}"&
fn:endsWith 判断字符串是否以另外字符串结束 &c:if test="${fn:endsWith(filename, ".txt")}"&
fn:escapeXml 把一些字符转成XML表示,例如 &字符应该转为& ${fn:escapeXml(param:info)}
fn:indexOf 子字符串在母字符串中出现的位置 ${fn:indexOf(name, "-")}
fn:join 将数组中的数据联合成一个新字符串,并使用指定字符格开 ${fn:join(array, ";")}
fn:length 获取字符串的长度,或者数组的大小 ${fn:length(shoppingCart.products)}
fn:replace 替换字符串中指定的字符 ${fn:replace(text, "-", "?")}
fn:split 把字符串按照指定字符切分 ${fn:split(customerNames, ";")}
fn:startsWith 判断字符串是否以某个子串开始 &c:if test="${fn:startsWith(product.id, "100-")}"&
fn:substring 获取子串 ${fn:substring(zip, 6, -1)}
fn:substringAfter 获取从某个字符所在位置开始的子串 &${fn:substringAfter(zip, "-")}
fn:substringBefore 获取从开始到某个字符所在位置的子串 ${fn:substringBefore(zip, "-")}
fn:toLowerCase 转为小写 ${fn.toLowerCase(product.name)}
fn:toUpperCase 转为大写字符 ${fn.UpperCase(product.name)}
fn:trim 去除字符串前后的空格 ${fn.trim(name)}
fn:contains(string, substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true
fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果&
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串??&
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
在jsp中 使用EL表达式时,不可以使用java提供的功能,比如indexOf()等。
&c:if test="${Boolean.valueOf(requestScope.addresult)==false}"&&
The function valueOf must be used with a prefix when a default namespace is not specified
Alpha 阅读(10288) |
&&& &&& 公司发布的SEO专员招聘有一段时间了,一直没有找到合适的人选, 一方面专门从事这块职业的人员比较少,另一方面对这个职位有一定了解的人也比较少.那么我们所说的样的一个职位呢? 今天我们来探讨一下,在网上搜索了一个相关资料,找到这么一篇文章:,我们看看文章里面的表述:
&&&&&&& 其实seo专员的主要职责就是执行完成SEO主管制定的SEO策略和优化目标任务,通常需要做大量的内容编辑、软文发布和外链建设等各种体力活。现在也有很多公司在发布招聘的时候也有专门招聘SEO外链专员这样的职位,有一定规模的网站也会分为SEO网站优化、SEO网站编辑、SEO外链专员等这样的细分岗位,每个岗位根据SEO优化工作的侧重点不同,执行完成的工作重点也是不一样的。那么今天我们要讲的SEO专员的具体工作是什么?做好这个职位需要具备什么样的素质?
&&&&&&&SEO专员的具体工作,说到底核心工作就是研究搜索引擎,完成网站内容建设,丰富网站的内容,到各大网站平台发布定量合适的外链,交换友情链接,帮助网站获得关键词排名,并做好数据分析与跟踪。
&&& && 在这篇文章里讲述了什么是SEO专员,&SEO专员的具体工作,说到底核心工作就是研究搜索引擎,完成网站内容建设,丰富网站的内容,到各大网站平台发布定量合适的外链,交换友情链接,帮助网站获得关键词排名,并做好数据分析与跟踪。 但是要找到一名有耐心,有良好的沟通能力,超强的执行力,有比较强的心里承受能力,受得了寂寞的SEO专员却是一件不容易的事情。
发布一则SEO专员招聘要求:
任职要求:
1、男女不限,大专以上学历,年龄在20-35岁之间;
2、对互联网有浓厚的兴趣,熟悉网站的运作和推广的各种方式,能够根据公司的需求独立策划网站推广方案并执行;会熟练打字操作常用办公软件;
3、有一定的分析判断能力,能根据推广效果提出调整建议,具有敏锐的思维和创新能力,思维开阔;
4、工作认真、细致、敬业,有较强的沟通能力和团队合作精神;
5、1年以上相关工作经历或精通网站编辑及平面设计者或有一定的文字写作能力者优先。
岗位职责:
1、负责完成网站内容建设,友链外链建设,关键字优化,提高网站排名、搜索引擎收录量;
2、执行在线推广活动,收集推广反馈数据,不断改进推广效果;&
3、及时提出网络推广改进建议,给出实际可行的改进方案。
快来加入吧:)
Alpha 阅读(1363) |
& & & 一直从事于开发与运维相关技术的研究实践,最近在做几个房产网分站的SEO优化技术储备, 缘于的百度快照阴情不定让人很蛋疼,于是对此进行了深入的研究,发现SEO网站优化也是一门相当有技术含量的技术活,涉及的知识点和技术面都要广才能掌握大局,同时也要调动团队各环节,从网站的最初版面功能策划到页面的视觉设计和代码编写,再到程序开发时的架构设计,最后做内容时的内容编排等一系列的问题都得考虑到,且都要执行到位,否则任何一个环节没做好都有可能影响到整个SEO优化的效果.因此,今天开辟一个新版块,专门从事SEO优化技术的研究与实践.
& & & 目前在拿房产网的四个分站进行实战研究,希望能从中找到一些答案,这四个站的主关键词也是相当有竞争难度,比如这个关键词的收录量有250多万,但是/这个域名的百度收入占有量却只有两位数,而比东莞房产网迟了一个多月上线的,这个站域名是,它收录量都上三位数了,远远超过了东莞房产网的收入量,这让人更是摸不着头脑.表现最满意的是,它同样比东莞房产网上线迟了一个多月,但是收入量等各方面指数上升很明显.同样的网站架构,同样每天都有坚持在做内容,但是却有不一样的表现,这是一个值得研究的课题.
SEO既Search&Engine&Optimization,翻译为搜索引擎优化,是一种利用技术手段提升网站在搜索引擎之中的排名的方式,让搜索引擎更为信任网站,通过排在搜索引擎的前页从而获得更多的流量。
& & & 希望在接下来的SEO优化研究和实践工作中能找到这一系列的答案,届时与大家一起来分享.&
Alpha 阅读(1251) |
给大家推荐一处php主机-wopus主机,专业的wordpress主机!还可以省钱购买php主机,永久免费使用.
& & & &购买可以用wopus主机优惠码:alpha,&提交订单时手动输入&alpha
& & & &或者通过&&&&链接进入直接购买就可获得优惠,可以省钱哟.&&
& & & (wopus主机推介优惠码:alpha&永久有效)!打算买php主机的朋友请看以下介绍!
他们自己是这样介绍他们的产品的:
专业博客主机服务商
WopusIDC一直致力于为广大独立博客用户提供优质实惠的专业博客主机服务,现已积累有超过四年的专业博客主机服务经验,成为众多独立博客们的主机首选。
国内、国外主机任选
从国外主机到国内主机,WopusIDC给用户带来多种主机选择,打破访问速度的瓶颈,给广大独立博客用户带来更佳的主机体验。
快速搭建个性化博客
依托于Wopus平台上发布的数量众多的主题、插件以及文章教程,WopusIDC用户可以简单快速的搭建属于自己的个性化博客。
& & 买php主机用 wopus主机优惠码:alpha , 提交订单时手动输入&alpha ,永久免费使用,长期有效.
& & & &或 点击&
Alpha 阅读(1640) |
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对 外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。 2.修改MySQL的登录设置: # vi /f 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock skip-grant-tables 保存并且退出vi。 3.重新启动mysqld # /etc/init.d/mysqld restart Stopping MySQL: [ OK ] Starting MySQL: [ OK ] 4.登录并修改MySQL的root密码 # /usr/bin/mysql Welcome to the MySQL monitor. C or \g. Your MySQL connection id is 3 to server version: 3.23.56 Type '' or '\h' for help. Type '\c' to clear the buffer. mysql& USE Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql& UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; Query OK, 0 rows affected (0.00 sec) Rows matched: 2 Changed: 0 Warnings: 0 mysql& Query OK, 0 rows affected (0.01 sec) mysql& quit Bye 5.将MySQL的登录设置修改回来 # vi /f 将刚才在[mysqld]的段中加上的skip-grant-tables删除 保存并且退出vi。 6.重新启动mysqld # /etc/init.d/mysqld restart Stopping MySQL: [ OK ] Starting MySQL: [ OK ]
Alpha 阅读(1152) |
经常使用CentOS的朋友,可能会遇到和我一样的问题。开启了防火墙导致80端口无法访问,刚开始学习centos的朋友可以参考下。经常使用CentOS的朋友,可能会遇到和我一样的问题。最近在Linux CentOS防火墙下安装配置 ORACLE& 数据库的时候,总显示因为网络端口而导致的EM安装失败,遂打算先关闭一下CentOS防火墙。偶然看到CentOS防火墙的配置操作说明,感觉不错。执行&#8221;setup&#8221;命令启动文字模式配置实用程序,在&#8221;选择一种工具&#8221;中选择&#8221;防火墙配置&#8221;,然后选择&#8221;运行工具&#8221;按钮,出现CentOS防火墙配置界面,将&#8221;安全级别&#8221;设为&#8221;禁用&#8221;,然后选择&#8221;确定&#8221;即可. 这样重启计算机后,CentOS防火墙默认已经开放了80和22端口 简介:CentOS是Linux家族的一个分支。 CentOS防火墙在虚拟机的CENTOS装好APACHE不能用,郁闷,解决方法如下 /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 然后保存: /etc/rc.d/init.d/iptables save centos 5.3,5.4以上的版本需要用 service iptables save 来实现保存到配置文件。 这样重启计算机后,CentOS防火墙默认已经开放了80和22端口。 这里应该也可以不重启计算机: /etc/init.d/iptables restart CentOS防火墙的关闭,关闭其服务即可: 查看CentOS防火墙信息:/etc/init.d/iptables status 关闭CentOS防火墙服务:/etc/init.d/iptables stop 永久关闭?不知道怎么个永久法: chkconfig &#8211;level 35 iptables off 上面的内容是针对老版本的centos,下面的内容是基于新版本。 iptables -P INPUT DROP 这样就拒绝所有访问 CentOS 5.3 本系统数据,除了 Chain RH-Firewall-1-INPUT (2 references) 的规则外 , 呵呵。 用命令配置了 iptables 一定还要 service iptables save 才能保存到配置文件。 cat /etc/sysconfig/iptables 可以查看 防火墙 iptables 配置文件内容 # Generated by iptables-save v1.3.5 on Sat Apr 14 07:51:07 2001 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sat Apr 14 07:51:07 2001另外补充:CentOS 防火墙配置 80端口看了好几个页面内容都有错,下面是正确方法: #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 然后保存: #/etc/rc.d/init.d/iptables save 再查看是否已经有了: [root&#64;vcentos ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0* 设置iptables为自动启动 chkconfig --level 2345 iptables on 可能因为大家使用的版本不一,所有使用方法也略有不同。 如果需要远程管理mysql,则使用以下指令临时打开,用完后关闭&*&打开指令& iptables&-A&INPUT&-p&tcp&-s&xxx.xxx.xxx.xxx&--dport&3306&-j&ACCEPT&*&关闭指令& iptables&-D&INPUT&-p&tcp&-s&xxx.xxx.xxx.xxx&--dport&3306&-j&ACCEPT nginx 80 端口访问不了?添加一个本地回路&iptables&-A&INPUT&-i&lo&-j&ACCEPT&
Alpha 阅读(27858) |
系统连接状态篇:&1.查看TCP连接状态netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rnnetstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或&netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"t",state[key]}'&netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t",arr[k]}'netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rnnetstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c2.查找请求数请20个IP(常用于查找攻来源):&netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20&3.用tcpdump嗅探80端口的访问看看谁最高&tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20&4.查找较多time_wait连接&netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20&5.找查较多的SYN连接&netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more&6.根据端口列进程&netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1网站日志分析篇1(Apache):1.获得访问前10位的ip地址&cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10&cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'&2.访问次数最多的文件或页面,取前20&cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20&3.列出传输最大的几个exe文件(分析下载站的时候常用)&cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20&4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数&cat access.log |awk '($10 & 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100&5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面&cat access.log |awk& '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100&6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数&cat access.log |awk '($NF & 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100&7.列出传输时间超过 30 秒的文件&cat access.log |awk '($NF & 30){print $7}'|sort -n|uniq -c|sort -nr|head -20&8.统计网站流量(G)&cat access.log |awk '{sum+=$10} END {print sum/24}'&9.统计404的连接&awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort&10. 统计http status&cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'&cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn&10.蜘蛛分析,查看是哪些蜘蛛在抓取内容。&/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'网站日分析2(Squid篇)按域统计流量&zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'数据库篇&1.查看数据库执行的sql&/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'系统Debug分析篇&1.调试命令strace -p pid&2.跟踪指定进程的PIDgdb -p pidawk '{ip[$1]+=1} END{for(i in ip){print i," "ip[i]}}' access.log |wc -l其中access.log就是apache的访问日志。这个就可以统计独立ip数据1、把IP数量直接输出显示:cat access_log_.log |awk '{print $1}'|uniq -c|wc -l永久链接 : /4392.html
Alpha 阅读(1086) |
经常使用CentOS的朋友,可能会遇到和我一样的问题。开启了防火墙导致80端口无法访问,刚开始学习centos的朋友可以参考下。
经常使用CentOS的朋友,可能会遇到和我一样的问题。最近在Linux CentOS防火墙下安装配置 ORACLE
数据库的时候,总显示因为网络端口而导致的EM安装失败,遂打算先关闭一下CentOS防火墙。偶然看到CentOS防火墙的配置操作说明,感觉不错。执
行&#8221;setup&#8221;命令启动文字模式配置实用程序,在&#8221;选择一种工具&#8221;中选择&#8221;防火墙配置&#8221;,然后选择&#8221;运行工具&#8221;按钮,出现CentOS防火墙配置界面,
将&#8221;安全级别&#8221;设为&#8221;禁用&#8221;,然后选择&#8221;确定&#8221;即可. 这样重启计算机后,CentOS防火墙默认已经开放了80和22端口 简介:CentOS是Linux家族的一个分支。 CentOS防火墙在虚拟机的CENTOS装好APACHE不能用,郁闷,解决方法如下 /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 然后保存: /etc/rc.d/init.d/iptables save centos 5.3,5.4以上的版本需要用 service iptables save 来实现保存到配置文件。 这样重启计算机后,CentOS防火墙默认已经开放了80和22端口。 这里应该也可以不重启计算机: /etc/init.d/iptables restart CentOS防火墙的关闭,关闭其服务即可: 查看CentOS防火墙信息:/etc/init.d/iptables status 关闭CentOS防火墙服务:/etc/init.d/iptables stop 永久关闭?不知道怎么个永久法: chkconfig &#8211;level 35 iptables off 上面的内容是针对老版本的centos,下面的内容是基于新版本。 iptables -P INPUT DROP 这样就拒绝所有访问 CentOS 5.3 本系统数据,除了 Chain RH-Firewall-1-INPUT (2 references) 的规则外 , 呵呵。 用命令配置了 iptables 一定还要 service iptables save 才能保存到配置文件。 cat /etc/sysconfig/iptables 可以查看 防火墙 iptables 配置文件内容 # Generated by iptables-save v1.3.5 on Sat Apr 14 07:51:07 2001 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sat Apr 14 07:51:07 2001另外补充:CentOS 防火墙配置 80端口看了好几个页面内容都有错,下面是正确方法: #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT 然后保存: #/etc/rc.d/init.d/iptables save 再查看是否已经有了: [root&#64;vcentos ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 * 设置iptables为自动启动 chkconfig --level 2345 iptables on 可能因为大家使用的版本不一,所有使用方法也略有不同。
Alpha 阅读(9570) |
1.关闭防火墙[root&#64;CentOS ~]# chkconfig iptables off 2.关闭selinuxvi /etc/sysconfig/selinux //将SELINUX=enforcing修改为disabled然后重启生效 3、配置CentOS 6.0 第三方yum源(CentOS默认的标准源里没有nginx软件包)[root&#64;CentOS ~]# yum install wget//下载wget工具[root&#64;CentOS ~]# wget /installers/atomic//下载atomic yum源[root&#64;CentOS ~]# sh ./atomic//安装提示输入时输yes[root&#64;CentOS ~]# yum check-update//更新yum软件包 4.安装开发包和库文件[root&#64;CentOS ~]# yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel 5.卸载已安装的apache、mysql、php[root&#64;CentOS ~]# yum remove httpd[root&#64;CentOS ~]# yum remove mysql[root&#64;CentOS ~]# yum remove php 6.安装nginx[root&#64;CentOS ~]# yum install nginx[root&#64;CentOS ~]# service nginx start[root&#64;CentOS ~]# chkconfig --levels 235 nginx on//设2、3、5级别开机启动 7.安装mysql[root&#64;CentOS ~]# yum install mysql mysql-server mysql-devel[root&#64;CentOS ~]# service mysqld start[root&#64;CentOS ~]# chkconfig --levels 235 mysqld on[root&#64;CentOS ~]# mysqladmin -u root password "123456"//为root用户设置密码[root&#64;CentOS ~]# service mysqld restart//重启mysql 8.安装php[root&#64;CentOS ~]# yum install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap
php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
php-tidy php-common php-devel php-fpm//安装php和所需组件使PHP支持MySQL、FastCGI模式[root&#64;CentOS ~]# service php-fpm start[root&#64;CentOS ~]# chkconfig --levels 235 php-fpm on 9.配置nginx支持php[root&#64;CentOS ~]# mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak//将配置文件改为备份文件[root&#64;CentOS ~]# cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf//由于原配置文件要自己去写因此可以使用默认的配置文件作为配置文件//修改nginx配置文件,添加fastcgi支持[root&#64;CentOS ~]# vi /etc/nginx/nginx.confindex index.php index.html index.//加入index.phplocation ~ \.php$ {
/usr/share/nginx/
fastcgi_pass
127.0.0.1:9000;
fastcgi_index
fastcgi_param
SCRIPT_FILENAME
/usr/share/nginx/html$fastcgi_script_
}//将以上代码注释去掉,并修改成nginx默认路径 10.配置php//编辑文件php.ini,在文件末尾添加cgi.fix_pathinfo = 1[root&#64;CentOS ~]# vi /etc/php.ini 11.重启nginx php-fpm[root&#64;CentOS ~]# service nginx restart[root&#64;CentOS ~]# service php-fpm restart 12.建立info.php文件[root&#64;CentOS ~]# vi /usr/share/nginx/html/info.php&?php
phpinfo();?& 13.测试nginx是否解析php输入:192.168.1.105/info.php显示php界面说明解析成功
Alpha 阅读(4689) |
本文主要讲述如何使用Linux系统中的日志子系统及其命令,来更好地保护系统安全。
Linux系统中的日志子系统对于系统安全来说非常重要,它记录了系统每天发生的各种各 样的事情,包括那些用户曾经或者正在使用系统,可以通过日志来检查错误发生的原因,更重要的是在系统受到黑客攻击后,日志可以记录下攻击者留下的痕迹,通 过查看这些痕迹,系统管理员可以发现黑客攻击的某些手段以及特点,从而能够进行处理工作,为抵御下一次攻击做好准备。
在Linux系统中,有三类主要的日志子系统:
&#9679; 连接时间日志: 由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,login等程序会更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
&#9679; 进程统计: 由系统内核执行,当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。
&#9679; 错误日志:
由syslogd(8)守护程序执行,各种系统守护进程、用户程序和内核通过syslogd(3)守护程序向文件/var/log/messages报告 值得注意的事件。另外有许多Unix程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。
Linux下日志的使用
1.基本日志命令的使用
utmp、wtmp日志文件是多数Linux日志子系统的关键,它保存了用户登录进入和 退出的记录。有关当前登录用户的信息记录在文件utmp中; 登录进入和退出记录在文件wtmp中;
数据交换、关机以及重启的机器信息也都记录在wtmp文件中。所有的记录都包含时间戳。时间戳对于日志来说非常重要,因为很多攻击行为分析都是与时间有极 大关系的。这些文件在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循 环使用。它通常由cron运行的脚本来修改,这些脚本重新命名并循环使用wtmp文件。
utmp文件被各种命令文件使用,包括who、w、users和finger。而 wtmp文件被程序last
和ac使用。但它们都是二进制文件,不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这 两个文件包含的信息。具体用法如下:
who命令: who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。使用该命令,系统管理员可以查看当前系统存在哪些不法用户,从而对其进行审计和处理。例如: 运行who命令显示如下:
[root&#64;working]# who
root pts/0 May 9 21:11 (10.0.2.128)
root pts/1 May 9 21:16 (10.0.2.129)
lhwen pts/7 May 9 22:03 (10.0.2.27)
如果指明了wtmp文件名,则who命令查询所有以前的记录。例如命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。
日志使用注意事项
系统管理人员应该提高警惕,随时注意各种可疑状况,并且按时和随机地检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。例如:
&#9632; 用户在非常规的时间登录;
&#9632; 不正常的日志记录,比如日志的残缺不全或者是诸如wtmp这样的日志文件无故地缺少了中间的记录文件;
&#9632; 用户登录系统的IP地址和以往的不一样;
&#9632; 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录;
&#9632; 非法使用或不正当使用超级用户权限su的指令;
&#9632; 无故或者非法重新启动各项网络服务的记录。
另外, 尤其提醒管理人员注意的是: 日志并不是完全可靠的。高明的黑客在入侵系统后,经常会打扫现场。所以需要综合运用以上的系统命令,全面、综合地进行审查和检测,切忌断章取义,否则很难发现入侵或者做出错误的判断。
users命令: users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。运行该命令将如下所示:
[root&#64;working]# users
root root //只登录了一个Root权限的用户
last命令: last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。系统管理员可以周期性地对这些用户的登录情况进行审计和考核,从而发现其中存在的问题,确定不法用户,并进行处理。运行该命令,如下所示:
[root&#64;working]# last
devin pts/1 10.0.2.221 Mon Jul 21 15:08-down (8+17:46)
devin pts/1 10.0.2.221 Mon Jul 21 14:42 - 14:53 (00:11)
changyi pts/2 10.0.2.141 Mon Jul 21 14:12 - 14:12 (00:00)
devin pts/1 10.0.2.221 Mon Jul 21 12:51 - 14:40 (01:49)
reboot system boot 2.4.18 Fri Jul 18 15:42 (11+17:13)
reboot system boot 2.4.18 Fri Jul 18 15:34 (00:04)
reboot system boot 2.4.18 Fri Jul 18 15:02 (00:36)
读者可以看到,使用上述命令显示的信息太多,区分度很小。所以,可以通过指明用户来显示其登录信息即可。例如: 使用last devin来显示devin的历史登录信息,则如下所示:
[root&#64;working]# last devin
devin pts/1 10.0.2.221 Mon Jul 21 15:08 - down (8+17:46)
devin pts/1 10.0.2.221 Mon Jul 21 14:42 - 14:53 (00:11)
ac命令:ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连接的时间(小时),如果不使用标志,则报告总的时间。另外,可以加一些参数,例如,last -t 7表示显示上一周的报告。
lastlog命令
lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志
/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示
&#8220;**Never logged**&#8221;。注意需要以root身份运行该命令。运行该命令如下所示:
[root&#64;working]# lastlog
Username Port From Latest
root pts/1 10.0.2.129 二 5月 10 10:13:26 +
opal pts/1 10.0.2.129 二 5月 10 10:13:26 +
2.使用Syslog设备
Syslog已被许多日志函数采纳,被用在许多保护措施中,任何程序都可以通过syslog 记录事件。Syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。
Syslog设备核心包括一个守护进程(/etc/syslogd守护进程)和一个配置 文件(/etc/syslog.conf配置文件)。通常情况下,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中 (messages.*)。一个典型的syslog记录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围。
系统管理员通过使用syslog.conf文件,可以对生成的日志的位置及其相关信息进行灵活配置,满足应用的需要。例如,如果想把所有邮件消息记录到一个文件中,则做如下操作:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为\"err\"或更高。例如:
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg &#.cn
用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages,除了mail以外。级别\"none\"禁止一个设备:
#Log anything(except mail)of level info or higher
#Don\'t log private authentication messages!
*.info:mail.autHPriv.none /var/log/messages
在有些情况下,可以把日志送到打印机,这样网络入侵者怎么修改日志都不能清除入侵的痕迹。因此,syslog设备是一个攻击者的显著目标,破坏了它将会使用户很难发现入侵以及入侵的痕迹,因此要特别注意保护其守护进程以及配置文件。
3.程序日志的使用
许多程序通过维护日志来反映系统的安全状态。su命令允许用户获得另一个用户的权限,所 以它的安全很重要,它的文件为sulog,同样的还有sudolog。另外,诸如Apache等Http的服务器都有两个日志:
access_log(客户端访问日志)以及error_log(服务出错日志)。
FTP服务的日志记录在xferlog文件当中,Linux下邮件传送服务(sendmail)的日志一般存放在maillog文件当中。
程序日志的创建和使用在很大程度上依赖于用户的良好编程习惯。对于一个优秀的程序员来 说,任何与系统安全或者网络安全相关的程序的编写,都应该包含日志功能,这样不但便于程序的调试和纠错,而且更重要的是能够

我要回帖

更多关于 安徽合肥 的文章

 

随机推荐