草庐IT

LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)

king_819 2023-03-28 原文
        apache官方宣称apache 2.4在性能上提升了很多,所以就把第一版的LNAMP进行了升级,nginx、apache、mysql、php全部采用最新版本,php 5.4有很多扩展没有跟进,这个是比较大的遗憾,比如:Zend Guard Loade、accelerator、Suhosin

一、系统初始化

  1. chmod +x /opt/init_system.sh  
  2. /opt/init_system.sh 
二、更新组件
#yum源修改

  1. cd /etc/yum.repos.d/  
  2. mv CentOS-Base.repo CentOS-Base.repo.backup  
  3. wget http://mirrors.163.com/.help/CentOS5-Base-163.repo  
  4. yum makecache 
  1. yum -y install gcc gcc-c++ bison patch unzip mlocate flex wget automake autoconf gd cpp gettext readline-devel libjpeg \  
  2. libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 \  
  3. glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openldap \  
  4. openldap-devel openldap-clients openldap-servers nss_ldap expat-devel libtool libtool-ltdl-devel bison 
三、LANMP安装配置(nginx、apache整合)
#=============== download software =============#
cd /opt
wget http://nginx.org/download/nginx-1.2.0.tar.gz
#2.4.2分成两个包,把apr单独做成一个dep包
wget http://www.apache.org/dist/httpd/httpd-2.4.2.tar.bz2
wget http://mirror.bjtu.edu.cn/apache/httpd/httpd-2.4.2-deps.tar.bz2
wget http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.23.tar.gz/from/http://mysql.he.net/
#rpaf模块,该模块用于apache做后端时获取访客真实的IP
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
#字符转换库libiconv
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2/download
wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download
wget http://cn.php.net/get/php-5.4.0.tar.bz2/from/this/mirror
#php5-mail-header.patch为php被丁,有助于防止邮件发送被滥用
wget http://www.lancs.ac.uk/~steveb/patches/php-mail-header-patch/php5-mail-header.patch
#PHP的memcache扩展
wget http://pecl.php.net/get/memcache-3.0.6.tgz
wget https://launchpadlibrarian.net/103487645/libmemcached-1.0.2.tar.gz
wget http://pecl.php.net/get/memcached-2.0.1.tgz
#将eaccelerator换成xcache(xcache 2.0支持php 5.4)
wget http://xcache.lighttpd.net/pub/Releases/2.0.0/xcache-2.0.0.tar.gz
wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2/download
#ImageMagick完美代替GB类库处理图像
wget ftp://ftp.p_w_picpathmagick.org/pub/ImageMagick/ImageMagick-6.7.6-7.tar.bz2
wget http://pecl.php.net/get/imagick-3.1.0RC1.tgz
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.bz2
wget http://sourceforge.net/projects/pcre/files/pcre/8.30/pcre-8.30.tar.bz2/download
#memcached缓存
wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
wget https://github.com/downloads/libevent/libevent/libevent-2.0.18-stable.tar.gz
#Tcmalloc 优化nginx、mysql
#64位操作系统请先安装 libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API
wget http://mirror.yongbok.net/nongnu/libunwind/libunwind-1.0.1.tar.gz
wget http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz

#============== Install mysql 5.5.23 ==================#
#使用Tcmalloc 优化nginx、mysql
#64位操作系统请先安装 libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API

  1. cd /opt  
  2. tar -zxvf libunwind-1.0.1.tar.gz  
  3. cd libunwind-1.0.1  
  4. ./configure  
  5. make;make install  
  6. cd ../  
  7.  
  8. tar -zxvf gperftools-2.0.tar.gz  
  9. cd gperftools-2.0  
  10. ./configure  
  11. make;make install  
  12.  
  13. echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf  
  14. /sbin/ldconfig  
  15. cd ../  
  16.  
  17. tar -zxvf cmake-2.8.8.tar.gz  
  18. cd cmake-2.8.8  
  19. ./bootstrap  
  20. gmake  
  21. gmake install  
  22. cd ../  
  23.  
  24. /usr/sbin/groupadd mysql  
  25. /usr/sbin/useradd -g mysql mysql -s /sbin/nologin  
  26. mkdir -p /data/mysql/{data,binlog,relaylog,mysql}  
  27. chown -R mysql:mysql /data/mysql  
  28. cd /opt  
  29. tar zxvf mysql-5.5.23.tar.gz  
  30. cd mysql-5.5.23/  
  31. rm -rf CMakeCache.txt  
  32. cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  
  33. -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  
  34. -DDEFAULT_CHARSET=utf8 \  
  35. -DDEFAULT_COLLATION=utf8_general_ci \  
  36. -DEXTRA_CHARSETS=all \  
  37. -DWITH_MYISAM_STORAGE_ENGINE=1 \  
  38. -DWITH_INNOBASE_STORAGE_ENGINE=1 \  
  39. -DWITH_READLINE=1 \  
  40. -DENABLED_LOCAL_INFILE=1 \  
  41. -DMYSQL_DATADIR=/data/mysql/data \  
  42. -DMYSQL_TCP_PORT=3306   
  43. make;make install  
  44. chmod +w /usr/local/mysql  
  45. chown -R mysql:mysql /usr/local/mysql  
  46. ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18 
#编辑mysql配置文件

  1. cat >> /etc/my.cnf <<EOF 
  2. [client]  
  3. port    = 3306 
  4. socket  = /data/mysql/mysql.sock  
  5.  
  6. [mysqld]  
  7. character_set_server = utf8 
  8. collation-server = utf8_general_ci 
  9. replicate-ignore-db = mysql 
  10. replicate-ignore-db = test 
  11. replicate-ignore-db = information_schema 
  12. user    = mysql 
  13. port    = 3306 
  14. socket  = /data/mysql/mysql.sock  
  15. basedir = /usr/local/mysql  
  16. datadir = /data/mysql/data  
  17. log-error = /data/mysql/mysql_error.log  
  18. pid-file = /data/mysql/mysql.pid  
  19. open_files_limit    = 10240 
  20. back_log = 600 
  21. max_connections = 5000 
  22. max_connect_errors = 6000 
  23. table_cache = 512 
  24. external-locking = FALSE 
  25. max_allowed_packet = 32M 
  26. sort_buffer_size = 6M 
  27. join_buffer_size = 8M 
  28. thread_cache_size = 300 
  29. thread_concurrency = 8 
  30. query_cache_size = 512M 
  31. query_cache_limit = 2M 
  32. query_cache_min_res_unit = 2k 
  33. default-storage-engine = MyISAM 
  34. thread_stack = 256K 
  35. transaction_isolation = READ-COMMITTED  
  36. tmp_table_size = 256M 
  37. max_heap_table_size = 256M 
  38. long_query_time = 3 
  39. log-slave-updates  
  40. log-bin = /data/mysql/binlog/binlog  
  41. binlog_cache_size = 4M 
  42. binlog_format = MIXED 
  43. max_binlog_cache_size = 8M 
  44. max_binlog_size = 100M 
  45. relay-log-index = /data/mysql/relaylog/relaylog  
  46. relay-log-info-file = /data/mysql/relaylog/relaylog  
  47. relay-log = /data/mysql/relaylog/relaylog  
  48. expire_logs_days = 30 
  49. key_buffer_size = 384M 
  50. read_buffer_size = 4M 
  51. read_rnd_buffer_size = 16M 
  52. bulk_insert_buffer_size = 64M 
  53. myisam_sort_buffer_size = 128M 
  54. myisam_max_sort_file_size = 10G 
  55. myisam_repair_threads = 1 
  56. myisam_recover  
  57.  
  58. interactive_timeout = 120 
  59. wait_timeout = 120 
  60.  
  61. skip_external_locking  
  62. skip-name-resolve  
  63. #master-connect-retry = 10 
  64. slave-skip-errors = 1032,1062,126,1114,1146,1048,1396  
  65.  
  66. #master-host     =   192.168.1.2  
  67. #master-user     =   username 
  68. #master-password =   password  
  69. #master-port     =  3306 
  70.  
  71. server-id = 1 
  72.  
  73. skip-innodb  
  74.  
  75. #log-slow-queries = /data/mysql/slow.log  
  76. #long_query_time = 10 
  77.  
  78. [mysqldump]  
  79. quick  
  80. max_allowed_packet = 32M 
  81. EOF 
#初始化mysql

  1. /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql 
#利用TCMalloc提高mysql在高并发下的性能
vi /usr/local/mysql/bin/mysqld_safe

#在# executing mysqld_safe的下一行,加上:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

#或者通sed添加
sed -i '/# executing mysqld_safe/a\export LD_PRELOAD=/usr/local/lib/libtcmalloc.so' /usr/local/mysql/bin/mysqld_safe

#设置mysql启动文件
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
vi /etc/rc.d/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql/data

#或者通sed修改
sed -i '46 s#basedir=#basedir=/usr/local/mysql#'  /etc/rc.d/init.d/mysqld
sed -i '47 s#datadir=#datadir=/data/mysql/data#'  /etc/rc.d/init.d/mysqld

chmod 700 /etc/rc.d/init.d/mysqld
/etc/rc.d/init.d/mysqld start

#使用lsof命令查看tcmalloc是否起效(如下图)
/usr/sbin/lsof -n | grep tcmalloc

#设置mysql开机启动
/sbin/chkconfig --add mysqld
/sbin/chkconfig --level 2345 mysqld on
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin

#设置root密码(753951)
/sbin/mysqladmin -u root password 753951

#配置库文件搜索路径
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
/sbin/ldconfig

#添加/usr/local/mysql/bin到环境变量PATH中
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

#添加mysql管理帐户
#mysql -h localhost -u root -p753951
#msqyl> use mysql;
#msqyl> grant all on *.* to 'kerry'@'192.168.9.100' identified by '852741';
#msqyl> flush privileges;
#msqyl> exit;

#================= Install apache 2.4.2 ==============#

  1. /usr/sbin/groupadd www  
  2. /usr/sbin/useradd -g www www -s /sbin/nologin  
  3. mkdir -p /data/www/{kerry,king}  
  4. mkdir -p /data/logs/{kerry,king}  
  5. chown -R www:www /data/www  
  6. chown -R www:www /data/logs  
  7. cd /opt  
  8.  
  9. wget http://ftp.gnu.org/gnu/libtool/libtool-2.4.2.tar.gz  
  10. rpm -e libtool-1.5.22-7.el5_4  
  11. tar -zxvf libtool-2.4.2.tar.gz  
  12. cd libtool-2.4.2  
  13. ./configure  
  14. make;make install  
  15.  
  16. tar -jxvf pcre-8.30.tar.bz2  
  17. cd pcre-8.30  
  18. ./configure --prefix=/usr/local/pcre  
  19. make;make install  
  20. cd ../  
  21.  
  22. tar -jxvf httpd-2.4.2.tar.bz2  
  23. tar -jxvf httpd-2.4.2-deps.tar.bz2  
  24. cd  httpd-2.4.2 
#隐藏apache版本信息

  1. sed -i 's/#define AP_SERVER_BASEPRODUCT "Apache"/#define AP_SERVER_BASEPRODUCT "Microsoft-IIS 5.0"/' include/ap_release.h  
  2. sed -i 's/#define PLATFORM "Unix"/#define PLATFORM "win32"/' os/unix/os.h 
  1. ./configure --prefix=/usr/local/apache \  
  2. --enable-deflate \  
  3. --enable-headers \  
  4. --enable-mime-magic \  
  5. --enable-proxy \  
  6. --enable-ssl \  
  7. --enable-so \  
  8. --enable-rewrite \  
  9. --enable-suexec \  
  10. --with-suexec-bin=/usr/sbin/suexec \  
  11. --with-suexec-caller=www \  
  12. --with-pcre=/usr/local/pcre/bin/pcre-config \  
  13. --with-mpm=prefork \  
  14. --with-ssl=/usr  
  15.  
  16. make;make install 
#make的时候报错,“/usr/lib/libexpat.so: could not read symbols: File in wrong format”
#解决方法:
\cp /usr/lib64/libexpat.* /usr/lib/

#配置自启动文件
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
vi /etc/init.d/httpd
#在首行#!/bin/sh下添加
# Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache/logs/httpd.pid
# config: /usr/local/apache/conf/httpd.conf

#或者直接使用sed添加

  1. sed -i '/#!\/bin\/sh/a\# chkconfig: - 85 15\n# description: web server\n# processname: httpd\n# pidfile: /usr/local/apache/logs/httpd.pid\n# config: /usr/local/apache/conf/httpd.conf' /etc/init.d/httpd 
#修改apache配置文件
cd /usr/local/apache/conf/
mv httpd.conf httpd.conf.bak

  1. cat >> httpd.conf <<EOF 
  2. ServerRoot "/usr/local/apache"  
  3. Listen 80  
  4. Timeout 300  
  5. KeepAlive Off  
  6. MaxKeepAliveRequests 100  
  7. KeepAliveTimeout 5  
  8. UseCanonicalName Off  
  9. AccessFileName .htaccess  
  10. TraceEnable Off  
  11. ServerTokens ProductOnly  
  12. FileETag None  
  13. ServerSignature Off  
  14. HostnameLookups Off  
  15.  
  16. # LoadModule foo_module modules/mod_foo.so  
  17. #  
  18. LoadModule authn_file_module modules/mod_authn_file.so  
  19. #LoadModule authn_dbm_module modules/mod_authn_dbm.so  
  20. #LoadModule authn_anon_module modules/mod_authn_anon.so  
  21. #LoadModule authn_dbd_module modules/mod_authn_dbd.so  
  22. #LoadModule authn_socache_module modules/mod_authn_socache.so  
  23. LoadModule authn_core_module modules/mod_authn_core.so  
  24. LoadModule authz_host_module modules/mod_authz_host.so  
  25. LoadModule authz_groupfile_module modules/mod_authz_groupfile.so  
  26. LoadModule authz_user_module modules/mod_authz_user.so  
  27. #LoadModule authz_dbm_module modules/mod_authz_dbm.so  
  28. #LoadModule authz_owner_module modules/mod_authz_owner.so  
  29. #LoadModule authz_dbd_module modules/mod_authz_dbd.so  
  30. LoadModule authz_core_module modules/mod_authz_core.so  
  31. LoadModule access_compat_module modules/mod_access_compat.so  
  32. LoadModule auth_basic_module modules/mod_auth_basic.so  
  33. #LoadModule auth_form_module modules/mod_auth_form.so  
  34. #LoadModule auth_digest_module modules/mod_auth_digest.so  
  35. #LoadModule allowmethods_module modules/mod_allowmethods.so  
  36. #LoadModule file_cache_module modules/mod_file_cache.so  
  37. #LoadModule cache_module modules/mod_cache.so  
  38. #LoadModule cache_disk_module modules/mod_cache_disk.so  
  39. #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so  
  40. #LoadModule socache_dbm_module modules/mod_socache_dbm.so  
  41. #LoadModule socache_memcache_module modules/mod_socache_memcache.so  
  42. #LoadModule dbd_module modules/mod_dbd.so  
  43. #LoadModule dumpio_module modules/mod_dumpio.so  
  44. #LoadModule buffer_module modules/mod_buffer.so  
  45. #LoadModule ratelimit_module modules/mod_ratelimit.so  
  46. LoadModule reqtimeout_module modules/mod_reqtimeout.so  
  47. #LoadModule ext_filter_module modules/mod_ext_filter.so  
  48. #LoadModule request_module modules/mod_request.so  
  49. #LoadModule include_module modules/mod_include.so  
  50. LoadModule filter_module modules/mod_filter.so  
  51. #LoadModule substitute_module modules/mod_substitute.so  
  52. #LoadModule sed_module modules/mod_sed.so  
  53. #LoadModule deflate_module modules/mod_deflate.so  
  54. LoadModule mime_module modules/mod_mime.so  
  55. LoadModule log_config_module modules/mod_log_config.so  
  56. #LoadModule log_debug_module modules/mod_log_debug.so  
  57. #LoadModule logio_module modules/mod_logio.so  
  58. LoadModule env_module modules/mod_env.so  
  59. #LoadModule mime_magic_module modules/mod_mime_magic.so  
  60. #LoadModule expires_module modules/mod_expires.so  
  61. LoadModule headers_module modules/mod_headers.so  
  62. #LoadModule unique_id_module modules/mod_unique_id.so  
  63. LoadModule setenvif_module modules/mod_setenvif.so  
  64. LoadModule version_module modules/mod_version.so  
  65. #LoadModule remoteip_module modules/mod_remoteip.so  
  66. LoadModule proxy_module modules/mod_proxy.so  
  67. LoadModule proxy_connect_module modules/mod_proxy_connect.so  
  68. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so  
  69. LoadModule proxy_http_module modules/mod_proxy_http.so  
  70. LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  
  71. LoadModule proxy_scgi_module modules/mod_proxy_scgi.so  
  72. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
  73. #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so  
  74. LoadModule proxy_express_module modules/mod_proxy_express.so  
  75. #LoadModule session_module modules/mod_session.so  
  76. #LoadModule session_cookie_module modules/mod_session_cookie.so  
  77. #LoadModule session_dbd_module modules/mod_session_dbd.so  
  78. #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so  
  79. #LoadModule ssl_module modules/mod_ssl.so  
  80. LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so  
  81. LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so  
  82. LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so  
  83. LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so  
  84. LoadModule unixd_module modules/mod_unixd.so  
  85. #LoadModule dav_module modules/mod_dav.so  
  86. LoadModule status_module modules/mod_status.so  
  87. LoadModule autoindex_module modules/mod_autoindex.so  
  88. #LoadModule info_module modules/mod_info.so  
  89. #LoadModule suexec_module modules/mod_suexec.so  
  90. #LoadModule cgi_module modules/mod_cgi.so  
  91. #LoadModule dav_fs_module modules/mod_dav_fs.so  
  92. LoadModule vhost_alias_module modules/mod_vhost_alias.so  
  93. #LoadModule negotiation_module modules/mod_negotiation.so  
  94. LoadModule dir_module modules/mod_dir.so  
  95. #LoadModule actions_module modules/mod_actions.so  
  96. #LoadModule speling_module modules/mod_speling.so  
  97. #LoadModule userdir_module modules/mod_userdir.so  
  98. LoadModule alias_module modules/mod_alias.so  
  99. LoadModule rewrite_module modules/mod_rewrite.so  
  100.  
  101. <IfModule unixd_module> 
  102. User www  
  103. Group www  
  104. </IfModule> 
  105.  
  106. ServerAdmin king_819@163.com  
  107. <Directory /> 
  108.     AllowOverride none  
  109.     Require all denied  
  110. </Directory> 
  111.  
  112. DocumentRoot "/usr/local/apache/htdocs"  
  113. <Directory "/usr/local/apache/htdocs"> 
  114.     Options Indexes FollowSymLinks  
  115.     AllowOverride None  
  116.     Require all granted  
  117. </Directory> 
  118.  
  119. <IfModule dir_module> 
  120.     DirectoryIndex index.html index.php  
  121. </IfModule> 
  122.  
  123. <Files ".ht*"> 
  124.     Require all denied  
  125. </Files> 
  126.  
  127. ErrorLog "logs/error_log"  
  128. LogLevel warn  
  129.  
  130. <IfModule log_config_module> 
  131.     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  
  132.     LogFormat "%h %l %u %t \"%r\" %>s %b" common  
  133.  
  134.     <IfModule logio_module> 
  135.       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio  
  136.     </IfModule> 
  137.  
  138.     CustomLog "logs/access_log" common  
  139. </IfModule> 
  140.  
  141. <IfModule alias_module> 
  142.     ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"  
  143.  
  144. </IfModule> 
  145.  
  146. <IfModule cgid_module> 
  147.     #Scriptsock logs/cgisock  
  148. </IfModule> 
  149.  
  150. <Directory "/usr/local/apache/cgi-bin"> 
  151.     AllowOverride None  
  152.     Options None  
  153.     Require all granted  
  154. </Directory> 
  155.  
  156. RewriteEngine on  
  157. <IfModule mime_module> 
  158.     TypesConfig conf/mime.types  
  159.     AddType application/x-compress .Z  
  160.     AddType application/x-gzip .gz .tgz  
  161.     AddType application/x-httpd-php .php .php3 .php4 .php5 .php6  
  162.     AddType application/x-httpd-php-source .phps  
  163. </IfModule> 
  164.  
  165. # Server-pool management (MPM specific)  
  166. Include conf/extra/httpd-mpm.conf  
  167.  
  168. # Virtual hosts  
  169. Include conf/extra/httpd-vhosts.conf  
  170.  
  171. # Configure mod_proxy_html to understand HTML4/XHTML1  
  172. <IfModule proxy_html_module> 
  173. Include conf/extra/proxy-html.conf  
  174. </IfModule> 
  175.  
  176. # Secure (SSL/TLS) connections  
  177. #Include conf/extra/httpd-ssl.conf  
  178.  
  179. <IfModule ssl_module> 
  180. SSLRandomSeed startup builtin  
  181. SSLRandomSeed connect builtin  
  182. </IfModule> 
  183. EOF 
#配置mpm_prefork_module
mv extra/httpd-mpm.conf extra/httpd-mpm.conf.bak

  1. cat >> extra/httpd-mpm.conf <<EOF 
  2. <IfModule mpm_prefork_module> 
  3.     ServerLimit   10000  
  4.     StartServers  5  
  5.     MinSpareServers  5  
  6.     MaxSpareServers  10  
  7.     MaxRequestWorkers  10000  
  8.     MaxConnectionsPerChild 10000  
  9. </IfModule> 
  10. EOF 
#配置虚拟主机(apache虚拟主机,通过IP访问默认会访问到第一个虚拟主机上,那么就第一个虚拟主机定义为127.0.0.1,目录指到/usr/local/apache/htdocs)
mv extra/httpd-vhosts.conf extra/httpd-vhosts.conf.bak

  1. cat >> extra/httpd-vhosts.conf <<EOF 
  2. #Vhosts  
  3. <VirtualHost *:81> 
  4.     ServerAdmin king_819@163.com  
  5.     DocumentRoot "/usr/local/apache/htdocs"  
  6.  <Directory "/usr/local/apache/htdocs"> 
  7.       Options Indexes FollowSymLinks  
  8.       AllowOverride None  
  9.       Require all granted  
  10.  </Directory> 
  11.     ServerName 127.0.0.1  
  12. </VirtualHost> 
  13. <VirtualHost *:81> 
  14.     ServerAdmin king_819@163.com  
  15.     DocumentRoot "/data/www/kerry"  
  16.  <Directory "/data/www/kerry"> 
  17.       Options Indexes FollowSymLinks  
  18.       AllowOverride None  
  19.       Require all granted  
  20.  </Directory> 
  21.     ServerName www.kerry.com  
  22.     ErrorLog "logs/kerry-error_log"  
  23.     CustomLog "|/usr/local/apache/bin/rotatelogs /data/logs/kerry/%y_%m_%d.access_log 86400" common  
  24. </VirtualHost> 
  25. <VirtualHost *:81> 
  26.     ServerAdmin king_819@163.com  
  27.     DocumentRoot "/data/www/king"  
  28.  <Directory "/data/www/king"> 
  29.       Options Indexes FollowSymLinks  
  30.       AllowOverride None  
  31.       Require all granted  
  32.  </Directory> 
  33.     ServerName www.king.com  
  34.     ErrorLog "logs/king-error_log"  
  35.     CustomLog "|/usr/local/apache/bin/rotatelogs /data/logs/king/%y_%m_%d.access_log 86400" common  
  36. </VirtualHost> 
  37. EOF 
#设置apache自启动
chmod 700 /etc/init.d/httpd
/etc/init.d/httpd start
/sbin/chkconfig --add httpd
/sbin/chkconfig --level 2345 httpd on
cd ../


#=================== Install PHP 5.4.0 ===============#
#编译安装相关支持库
cd /opt
tar -zxvf libiconv-1.14.tar.gz
cd libiconv-1.14/
./configure
make;make install
cd ../

tar -jxvf libmcrypt-2.5.8.tar.bz2
cd libmcrypt-2.5.8/
./configure
make;make install
/sbin/ldconfig

cd libltdl/
./configure --enable-ltdl-install
make;make install

cd /opt
tar -jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9/
./configure
make;make install
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

cd /opt
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make;make install

#编译php,这里我们为php打入补丁.有助于防止邮件发送被滥用(多用户)以及在邮件中提供有价值的信息.补丁介绍信息请点击:http://www.lancs.ac.uk/~steveb/patches/php-mail-header-patch/
cd /opt
tar -jxvf php-5.4.0.tar.gz
patch -d php-5.4.0 -p1 < php5-mail-header.patch
cd php-5.4.0
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-iconv-dir=/usr/local \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-ldap \
--with-ldap-sasl \
--with-xmlrpc \
--enable-zip \
--enable-soap

make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-production /usr/local/php/etc/php.ini
cd ../

#安装php扩展模块
cd /opt
tar -zxvf memcache-3.0.6.tgz
cd memcache-3.0.6/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir --enable-memcache
make;make install
cd ../

#make时出错(如下图)


#解决办法:修改memcache.c
将721行:
zend_list_insert(mmc, le_memcache_server);
改为:
zend_list_insert(mmc TSRMLS_CC, le_memcache_server);

将738行:
zend_list_insert(mmc, le_memcache_server);
改为:
zend_list_insert(mmc TSRMLS_CC, le_memcache_server);

将778行:
list_id = zend_list_insert(pool, le_memcache_pool);
改为:
list_id = zend_list_insert(pool TSRMLS_CC, le_memcache_pool);

将839行:
list_id = zend_list_insert(pool TSRMLS_CC, le_memcache_pool);
改为:
list_id = zend_list_insert(pool, le_memcache_pool);

#用sed修改

  1. sed -i 's#zend_list_insert(mmc, le_memcache_server);#zend_list_insert(mmc TSRMLS_CC, le_memcache_server);#' memcache.c  
  2. sed -i 's#list_id = zend_list_insert(pool, le_memcache_pool);#list_id = zend_list_insert(pool TSRMLS_CC, le_memcache_pool);#' memcache.c 
#php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached

#安装memcached的服务端支持库
cd /opt
tar -xzf libevent-2.0.18-stable.tar.gz
cd libevent-2.0.18-stable
./configure
make;make install
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib

#安装Memcached服务端
cd /opt
tar -xzf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure --prefix=/usr/local/memcached --with-libevent=/usr
make;make install

cd /opt
tar -zxvf libmemcached-1.0.2.tar.tar
cd libmemcached-1.0.2
./configure --prefix=/usr/local/libmemcached  --with-memcached
 make;make install

#安装php的memcached扩展库
cd /opt
tar -zxvf memcached-2.0.1.tgz
cd memcached-2.0.1
/usr/local/php/bin/phpize
./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --with-memcached --with-zlib
make;make install

#因eaccelerator-0.9.6.1不支持php 5.4.0,所以就改用XCache 2.0.0
cd /opt
tar -zxvf xcache-2.0.0.tar.gz
cd xcache-2.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make;make install

#安装pdo扩展
cd /opt
php-5.4.0/ext/pdo_mysql
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
make;make install

cd /opt
tar -jxvf ImageMagick-6.7.6-7.tar.bz2
cd ImageMagick-6.7.6-7
./configure --prefix=/usr/local/p_w_picpathmagick
make;make install

#imagick最新正式版为imagick-3.0.1.tgz,但imagick-3.0.1.tgz在make的时候会出现大量的报错信息,所以就改用imagick-3.1.0RC1.tgz
cd /opt
tar -zxvf imagick-3.1.0RC1.tgz
cd imagick-3.1.0RC1/
export  PKG_CONFIG_PATH=/usr/local/p_w_picpathmagick/lib/pkgconfig
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/p_w_picpathmagick
make;make install

cd /opt
tar -jxf ioncube_loaders_lin_x86.tar.bz2
cd ioncube
mkdir /usr/local/ioncube
mv ioncube_loader_lin_5.2.so /usr/local/ioncube/

#修改php.ini添加php扩展

  1. sed -i 's#; extension_dir = "./"#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20100525/"\nextension = "memcache.so"\nextension = "pdo_mysql.so"\nextension = "memcached.so"\nextension = "imagick.so"\n#' /usr/local/php/etc/php.ini 
  1. cat >> /usr/local/php/etc/php.ini <<EOF 
  2. [xcache-common]  
  3. extension = xcache.so  
  4.  
  5. [xcache]  
  6. xcache.shm_scheme =        "mmap" 
  7. xcache.size  =               256M 
  8. xcache.count =                 8 
  9. xcache.slots =                8K 
  10. xcache.ttl   =                 0 
  11. xcache.gc_interval =           0 
  12.  
  13. xcache.var_size  =            8M 
  14. xcache.var_count =             8 
  15. xcache.var_slots =            8K 
  16. xcache.var_ttl   =             0 
  17. xcache.var_maxttl   =          0 
  18. xcache.var_gc_interval =     300 
  19.  
  20. xcache.test =                Off 
  21. xcache.readonly_protection = Off 
  22. xcache.mmap_path =    "/dev/zero" 
  23.  
  24. xcache.coredump_directory =   "" 
  25.  
  26. xcache.cacher =               On 
  27. xcache.stat   =               On 
  28. xcache.optimizer =           Off 
  29.  
  30. [xcache.coverager]  
  31. xcache.coverager =          Off 
  32.  
  33. xcache.coveragedump_directory = "" 
  34. EOF 
#隐藏php版本
sed -i 's#expose_php = On#expose_php = Off#' /usr/local/php/etc/php.ini

#php安全设置,禁用函数
sed -i 's#disable_functions =#disable_functions =phpinfo,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source#' /usr/local/php/etc/php.ini
  
#重启apache,查看php扩展加载的情况
/etc/init.d/httpd restart


#============= Install Nginx ===================#
cd /opt
tar -zxvf nginx-1.2.0.tar.gz
cd nginx-1.2.0
./configure --user=www --group=www --prefix=/usr/local/nginx --with-pcre=/opt/pcre-8.30 --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-google_perftools_module
make;make install

cd ../

#添加nginx启动脚本

  1. cat >> /etc/init.d/nginx <<EOF 
  2. #! /bin/sh  
  3. ulimit -n 65535  
  4. # Description: Startup script for nginx  
  5. # chkconfig: 2345 55 25  
  6.  
  7. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  
  8. DESC="nginx daemon" 
  9. NAME=nginx 
  10. DAEMON=/usr/local/nginx/sbin/$NAME  
  11. CONFIGFILE=/usr/local/nginx/conf/nginx.conf  
  12. PIDFILE=/usr/local/nginx/logs/$NAME.pid  
  13. SCRIPTNAME=/etc/init.d/$NAME  
  14.  
  15. set -e  
  16. [ -x "$DAEMON" ] || exit 0  
  17.  
  18. do_start() {  
  19.  $DAEMON -c $CONFIGFILE || echo -n "nginx already running"  
  20. }  
  21.  
  22. do_stop() {  
  23.  kill -QUIT `cat $PIDFILE` || echo -n "nginx not running"  
  24. }  
  25.  
  26. do_reload() {  
  27.  kill -HUP `cat $PIDFILE` || echo -n "nginx can't reload"  
  28. }  
  29.  
  30. case "$1" in  
  31.  start)  
  32.  echo -n "Starting $DESC: $NAME"  
  33.  do_start  
  34.  echo "."  
  35.  /etc/init.d/httpd start  
  36.  ;;  
  37.  stop)  
  38.  echo -n "Stopping $DESC: $NAME"  
  39.  do_stop  
  40.  echo "."  
  41.  /etc/init.d/httpd stop  
  42.  ;;  
  43.  reload)  
  44.  echo -n "Reloading $DESC configuration..."  
  45.  do_reload  
  46.  echo "."  
  47.  /etc/init.d/httpd restart  
  48.  ;;  
  49.  restart)  
  50.  echo -n "Restarting $DESC: $NAME"  
  51.  do_stop  
  52.  sleep 1  
  53.  do_start  
  54.  echo "."  
  55.  /etc/init.d/httpd restart  
  56.  ;;  
  57.  *)  
  58.  echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2  
  59.  exit 3  
  60.  ;;  
  61. esac  
  62.  
  63. exit 0  
  64. EOF 
#添加nginx配置文件
mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

  1. cat >> /usr/local/nginx/conf/nginx.conf <<EOF 
  2. user  www www;     
  3. worker_processes 8;   
  4. error_log  /usr/local/nginx/logs/nginx_error.log  crit;   
  5. pid        /usr/local/nginx/logs/nginx.pid;   
  6. #使用Tcmalloc优化nginx性能  
  7. google_perftools_profiles /var/tmp/tcmalloc;  
  8. #Specifies the value for maximum file descriptors that can be opened by this process.   
  9. worker_rlimit_nofile 65535;   
  10. #工作模式及连接数上限   
  11. events   
  12. {    
  13.  use epoll;    
  14.  worker_connections 65535;   
  15. }   
  16. #设定http服务器,利用它的反向代理功能提供负载均衡支持   
  17. http   
  18. {     
  19.   #设定mime类型     
  20.   include       mime.types;     
  21.   default_type  application/octet-stream;       
  22.   #charset  gb2312;    
  23.   #设定请求缓冲        
  24.   server_names_hash_bucket_size 128;     
  25.   client_header_buffer_size 32k;    
  26.   large_client_header_buffers 4 32k;    
  27.   client_max_body_size 30m;   
  28.   sendfile on;    
  29.   tcp_nopush     on;     
  30.   keepalive_timeout 60;   
  31.   tcp_nodelay on;   
  32.   server_tokens off;  
  33.   client_body_buffer_size 512k;   
  34.   proxy_connect_timeout   5;   
  35.   proxy_send_timeout      60;   
  36.   proxy_read_timeout      5;   
  37.   proxy_buffer_size       16k;   
  38.   proxy_buffers           4 64k;   
  39.   proxy_busy_buffers_size 128k;   
  40.   proxy_temp_file_write_size 128k;   
  41.   #  fastcgi_connect_timeout 300;   
  42.   #  fastcgi_send_timeout 300;   
  43.   #  fastcgi_read_timeout 300;   
  44.   #  fastcgi_buffer_size 64k;   
  45.   #  fastcgi_buffers 4 64k;   
  46.   #  fastcgi_busy_buffers_size 128k;   
  47.   #  fastcgi_temp_file_write_size 128k;     
  48.   gzip on;   
  49.   gzip_min_length  1k;   
  50.   gzip_buffers     4 16k;   
  51.   gzip_http_version 1.1;   
  52.   gzip_comp_level 2;   
  53.   gzip_types       text/plain application/x-javascript text/css application/xml;   
  54.   gzip_vary on;   
  55.     
  56.   #limit_zone  crawler  $binary_remote_addr  10m;   
  57.   #定义访问日志的写入格式  
  58.   log_format  wwwlog  '$remote_addr - $remote_user [$time_local] "$request" '                
  59.  '$status $body_bytes_sent "$http_referer" '               
  60.  '"$http_user_agent" $http_x_forwarded_for';   
  61.   log_format  bbslog  '$remote_addr - $remote_user [$time_local] "$request" '                
  62.  '$status $body_bytes_sent "$http_referer" '               
  63.  '"$http_user_agent" $http_x_forwarded_for';  
  64.  
  65.   ###禁止通过ip访问站点    
  66.    server{           
  67.  server_name _;           
  68.  return 404;           
  69.   }    
  70.   server  
  71.   {       
  72.  listen       80;      
  73.  server_name  www.kerry.com;      
  74.  index index.html index.htm index.php;#设定访问的默认首页地址       
  75.  root  /data/www/kerry;#设定网站的资源存放路径        
  76.  #limit_conn   crawler  20;    
  77.  if (-d $request_filename)  
  78.  {  
  79.   rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;  
  80.  }  
  81.  #所有jsp的页面均交由tomcat处理  
  82.  location ~ \.(php)?$ {  
  83.   proxy_set_header  Host $host;    
  84.   proxy_set_header  X-Real-IP  $remote_addr;  
  85.   proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
  86.   proxy_pass http://127.0.0.1:81;#转向tomcat处理         
  87.  }              
  88.  location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ #设定访问静态文件直接读取不经过apache       
  89.  {         
  90.   expires      30d;       
  91.  }        
  92.  location ~ .*\.(js|css)?$       
  93.  {         
  94.   expires      1h;       
  95.  }                 
  96.  access_log  /data/logs/kerry/kerry_nginx.log wwwlog;#设定访问日志的存放路径    
  97.    }   
  98.   server  
  99.   {       
  100.  listen       80;      
  101.  server_name  www.king.com;      
  102.  index index.html index.htm index.php;#设定访问的默认首页地址       
  103.  root  /data/www/king;#设定网站的资源存放路径        
  104.  #limit_conn   crawler  20;    
  105.  if (-d $request_filename)  
  106.  {  
  107.   rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;  
  108.  }  
  109.  #所有jsp的页面均交由tomcat处理  
  110.  location ~ \.(php)?$ {         
  111.   proxy_set_header  Host $host;    
  112.                 proxy_set_header  X-Real-IP  $remote_addr;  
  113.   proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
  114.   proxy_pass http://127.0.0.1:81;#转向tomcat处理         
  115.  }              
  116.  location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ #设定访问静态文件直接读取不经过apache       
  117.  {         
  118.   expires      30d;       
  119.  }        
  120.  location ~ .*\.(js|css)?$       
  121.  {         
  122.   expires      1h;       
  123.  }          
  124.  access_log  /data/logs/king/king_nginx.log bbslog;#设定访问日志的存放路径    
  125.    }   
  126.    server  
  127.    {  
  128.  listen  80;  
  129.  server_name  status.www.kerry.com;  
  130.  location / {  
  131.  stub_status on;  
  132.  access_log   off;  
  133.  }  
  134.    }  
  135. }   
  136. EOF 
#将nginx添加到启动服务中
chmod 700 /etc/init.d/nginx
/etc/init.d/nginx start
/sbin/chkconfig --add nginx
/sbin/chkconfig --level 2345 nginx on


#每天定时切割Nginx日志

  1. cat >>/usr/local/nginx/sbin/cut_nginx_log.sh<< EOF 
  2. #!/bin/bash  
  3. # This script run at 00:00  
  4. # The Nginx logs path  
  5. logs_path_kerry="/data/logs/kerry/" 
  6. logs_path_kerry="/data/logs/king/" 
  7. mv ${logs_path_kerry}kerry_nginx.log ${logs_path_kerry}$kerry_nginx_$(date -d "yesterday" +"%Y%m%d").log  
  8. mv ${logs_path_king}king_nginx.log ${logs_path_king}king_nginx_$(date -d "yesterday" +"%Y%m%d").log  
  9. kill -USR1 `cat /usr/local/nginx/nginx.pid`  
  10. EOF  
chmod +x /usr/local/nginx/sbin/cut_nginx_log.sh
#添加计划任务,每天凌晨00:00切割nginx访问日志
crontab -e
00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh

#为apache安装rpaf模块,该模块用于apache做后端时获取访客真实的IP
#使用apxs安装模块.这里要使用此前apache编译安装后的apxs
cd /opt
tar -zxf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

#错误提示:
mod_rpaf-2.0.c: In function 'rpaf_cleanup':
mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:151: warning: implicit declaration of function 'inet_addr'
mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c: In function 'change_remote_ip':
mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named 'remote_ip'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_addr'
mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_ip'
apxs:Error: Command failed with rc=65536

#解决办法:
#http://httpd.apache.org/docs/trunk/developer/new_api_2_4.html


#将150、151、164、183、186、187这几行的remote_ip修改成client_ip,remote_addr修改成client_addr

#编辑/usr/local/apache/conf/httpd.conf,添加模块参数,查找LoadModule php5_module modules/libphp5.so,在下方添加:

  1. LoadModule rpaf_module modules/mod_rpaf-2.0.so  
  2. #Mod_rpaf settings  
  3. RPAFenable On  
  4. #上面出现的192.168.9.9请修改为你本机所监听web服务的ip.多个IP用空格空开  
  5. RPAFproxy_ips 127.0.0.1 192.168.9.9  
  6. RPAFsethostname On  
  7. RPAFheader X-Forwarded-For 

有关LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)的更多相关文章

  1. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  4. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  5. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  6. ruby - Jekyll 2.0 中的 SCSS 生成错误 - 2

    我的项目布局如下:-Project-css-import.scss-_sass/main.scssimport.scss的内容是:------@import"main.scss";我期望发生的是将main.scss导入到import.scss中,然后,import.scss将在生成的_site/目录中编译为import.css。相反,我收到以下错误Conversionerror:Therewasanerrorconverting'css/import.scss'.jekyll2.0.3|Error:InvalidCSSafter"-":expectednumberorfunction,

  7. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  8. ruby - 在 Amazon OpsWorks 上使用 Ruby 2.0 - 2

    我想在AmazonOpsWorks上使用Ruby2.0,所以我正在尝试以下操作:选择自定义Recipe并将它们设置到我的forkhttps://github.com/aws/opsworks-cookbooks在此处更新所有版本号https://github.com/aws/opsworks-cookbooks/blob/master/ruby/attributes/ruby.rb到2.0值。虽然这似乎没有任何效果。自定义说明书是否会覆盖其内置的说明书?OpsWorks是否使用Recipe中的Ruby配方来进行基本的Ruby设置?同样的问题也适用于Nginx-我可以通过更改Recipe

  9. ruby-on-rails - Rails 4.1 和 4.2 之间 ActiveRecord Setter 的区别? - 2

    我们将我们的应用程序从Rails4.1.14升级到4.2.5.1并遇到了以下问题:string="SomeString"ar_model=SomeArModel.newar_model.some_attribute=string#nextlineistruefor4.1,butfailsfor4.2ar_model.some_attribute.object_id==string.object_id显然,对象setter会复制每个对象(如果我有一个数组,里面的每个对象也会被复制),我想知道,这是不是有意为之并且是某些新安全功能的一部分?更新我将ruby​​-2.2.2p95用于两个ra

  10. ruby-on-rails - Ruby 1.9.3 -> 2.0 别名方法和扩展 - 2

    我正在尝试将Ruby1.9.3应用程序升级到2.0,除了一个小问题外,一切似乎都很顺利。我写了一个模块,我将其包含在我的模型中以覆盖activerecorddestroy。它将现有的destroy方法别名为destroy!,然后覆盖destroy以更改记录上的deleted_at时间戳。仅当我升级到ruby​​2.0时,destroy!不再破坏记录,但其行为就像我的新覆盖方法一样。知道为什么会这样吗?下面是更相关的代码部分。完整要点here.defself.included(base)base.class_evaldoalias_method:destroy!,:destroyalia

随机推荐