• linux 部署WEB LAMP环境


    LAMP理论知识

    LAMP所需软件

    httpd (提供 Apache 主程式)
    mysql (MySQL 客户端程式)
    mysql-server (MySQL 服务器程序)
    php (PHP 主程式含给 apache 使用的模块)
    php-devel (PHP 的发展工具,这个与 PHP 外挂的加速软体有关)
    php-mysql (提供给 PHP 程序读取 MySQL 资料库的模块)
    

    Apache软件结构

    /etc/httpd/conf/httpd.conf         # 主要配置文件
    /etc/httpd/conf.d/*.conf         #主配置文件包含的子配置文件
    /usr/lib64/httpd/modules/, /etc/httpd/modules/    #Apache支持的模块默认放置的位置
    /var/www/html/        #Apache首页放置的目录
    /var/www/error/        #浏览器上显示的错误信息配置文件放置的位置
    /var/www/icons/        #这个目录提供 Apache 预设给予的一些小图示,通过输入‘http://localhost/icons/’ 显示。
    /var/www/cgi-bin/    #预设给一些可执行的 CGI网页程序放置的目录;当你输入‘http://localhost/cgi-bin/’ 时所显示的资料所在。
    /var/log/httpd/        #预设的httpd访问日志
    /usr/sbin/apachectl        #Apache的执行程序启动的脚本文件
    /usr/sbin/httpd        #二进制的Apache程序文件
    /usr/bin/htpasswd    #用来设置需要输入密码的网页的密码
    

    Mysql软件结构

    /etc/my.cnf        #mysql的主配置文件
    /var/lib/mysql/    #这个目录是 MySQL 数据库文件放置的位置!记得及时备份。
    

    PHP软件结构

    /etc/httpd/conf.d/php.conf        #Apache部分使用PHP模块的配置参数
    /etc/php.ini        #PHP的主要配置文件
    /usr/lib64/httpd/modules/libphp5.so    #PHP软件提供给Apache的模块程序,这也是我们能否在 Apache 网页上面设计 PHP 程序语言的东西。
    /etc/php.d/mysql.ini, /usr/lib64/php/modules/mysql.so    #PHP支持mysql的相关配置文件和模块
    /usr/bin/phpize, /usr/include/php/        #如果你未来想要安装类似 PHP 加速器以让浏览速度加快的话,那么这个档案与目录就得要存在,
    #否则加速器软体可无法编译成功喔!这两个资料也是 php-devel 软体所提供的啦!
    

    程序安装和配置

    yum -y install httpd mysql mysql-server php php-mysql
    

    Apache配置

    [root@www ~]# vim /etc/httpd/conf/httpd.conf
    ServerTokens OS
    # 这个项目在仅告知用户端我们服务器的版本与作业系统而已,不需要更动他。
    
    ServerRoot "/etc/httpd"
    # 服务器设定的最顶层目录,有点类似 chroot 那种感觉。包括 logs, modules
    # 等等的资料都应该要放置到此目录底下 (若未宣告成绝对路径时)
    
    PidFile run/httpd.pid
    # 放置 PID 的档案,可方便 Apache 软体的管理啦!只有相对路径吧!
    # 考虑 ServerRoot 设定值,所以档案在 /etc/httpd/run/httpd.pid !
    
    Timeout 60
    # 不论接收或传送,当持续连线等待超过 60 秒则该次连线就中断。
    # 一般来说,此数值在 300 秒左右即可,不需要修改这个原始值啦。
    
    KeepAlive On    <==最好将预设的 Off 改为 On 啦!
    # 是否允许持续性的连线,亦即一个 TCP 连线可以具有多个档案资料传送的要求。
    # 举例来说,如果你的网页内含很多图档,那么这一次连线就会将所有的资料送完,
    # 而不必每个图档都需要进行一次 TCP 连线。预设为 Off 请改为 On 较佳。
    
    MaxKeepAliveRequests 500  <==可以将原本的 100 改为 500 或更高
    # 与上个设定值 KeepAlive 有关,当 KeepAlive 设定为 On 时,则这个数值可决定
    # 该次连线能够传输的最大传输数量。为了增进效能则可以改大一点!0 代表不限制。
    
    KeepAliveTimeout 15
    # 在允许 KeepAlive 的条件下,则该次连线在最后一次传输后等待延迟的秒数。
    # 当超过上述秒数则该连线将中断。设定 15 差不多啦!如果设定太高 (等待时间较长),
    # 在较忙碌的系统上面将会有较多的 Apache 程序占用资源,可能有效能方面的困扰。
    
    #底下两个 perfork, worker 与内存管理有关,默认使用的prefork。
    #/usr/sbin/httpd:使用 prefork 模组;
    #/usr/sbin/httpd.worker:使用 worker 模组。
    <IfModule prefork.c>   
    StartServers       8   <==启动 httpd 时,唤醒几个 PID 来处理服务的意思
    MinSpareServers    5   <==最小的预备使用的 PID 数量
    MaxSpareServers   20   <==最大的预备使用的 PID 数量
    ServerLimit      256   <==服务器的限制
    MaxClients       256   <==最多可以容许多少个用户端同时连线到 httpd 的意思!
    MaxRequestsPerChild  4000
    </IfModule>
    
    <IfModule worker.c>
    StartServers         4
    MaxClients         300
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25
    MaxRequestsPerChild  0
    </IfModule>
    
    Listen 80        #监听的端口
    
    Include conf.d/*.conf
    # 因为这一行,所以放置到 /etc/httpd/conf.d/*.conf 的设定都会被读入!
    
    User apache
    Group apache
    # 前面提到的 prework, worker 等模组所启动的 process 之拥有者与群组设定。
    # 这个设定很重要,因为未来你提供的网页档案能不能被浏览都与这个身份有关啊!
    
    ServerAdmin wang_zengyi@126.com  <==改成你自己的 email 吧
    # 系统管理员的 email,当网站出现问题时,错误讯息会显示的联络信箱(错误回报)。
    
    ServerName www.centos.jet    <==自行设定好自己的主机名称较佳!
    # 设定主机名称,这个值如果没有指定的话,预设会以 hostname 的输出为依据。
    # 千万记得,你填入的这个主机名称要找的到 IP !(DNS 或 /etc/hosts)
    
    UseCanonicalName Off
    # 是否使用标准主机名称?如果你的主机有多个主机名称,若这个设定为 On,
    # 那么 Apache 只接受上头 servername 指定的主机名称连线而已。请使用 Off。
    
    AddDefaultCharset UTF-8
    #服务器强制使用UTF-8编码给客户端的浏览器使用。
    
    DocumentRoot "/var/www/html"  <==可以改成你放置首页的目录!
    # 这个设定值规范了 WWW 服务器主网页所放置的‘目录’,虽然设定值内容可以变更,
    

    PHP配置

    #了解即可,这个配置文件不需要任何的修改。
    [root@www ~]# cd /etc/httpd/conf.d
    [root@www conf.d]# ll *.conf
    -rw-r--r--. 1 root root 674 Jun 25 15:30 php.conf      <==提供 PHP 模组的设定
    -rw-r--r--. 1 root root 299 May 21  2009 welcome.conf  <==提供预设的首页欢迎讯息
    
    #了解即可,这个配置文件不需要任何的修改。
    [root@www conf.d]# vim /etc/httpd/conf.d/php.conf
    <IfModule prefork.c>  <==根据不同的 PID 模式给予不同的 PHP 运作模组
      LoadModule php5_module modules/libphp5.so
    </IfModule>
    <IfModule worker.c>
      LoadModule php5_module modules/libphp5-zts.so
    </IfModule>
    AddHandler php5-script .php  <==所以副档名一定要是 .php 结尾!
    AddType text/html .php       <==.php 结尾的档案是纯文字档
    DirectoryIndex index.php     <==首页档名增加 index.php 喔!
    #AddType application/x-httpd-php-source .phps <==特殊的用法!
    
    #PHP安全方面的限制
    [root@www ~]# vim /etc/php.ini
    register_globals = Off
    # 这个项目请确定为 Off (预设就是 Off),因为如果设定为 On 时,
    # 虽然程序执行比较不容易出状况,但是很容易不小心就被攻击。
    
    log_errors = On
    ignore_repeated_errors = On  <==这个设定值调整一下 (因预设为 Off)
    ignore_repeated_source = On  <==这个设定值调整一下
    # 这三个设定项目可以决定是否要将 PHP 程序的错误记录起来,
    # 建议将重复的错误资料忽略掉,否则在很忙碌的系统上,
    # 这些错误资料将可能造成你的用户访问日志暴增,导致效能不佳 (或宕机)
    
    display_errors = Off
    display_startup_errors = Off
    # 当你的程序发生问题时,是否要在浏览器上头显示相关的错误信息 (包括部分程序代码)
    # 强烈的建议设定为 Off 。不过如果是尚未开放的 WWW 服务器,为了你的 debug
    # 容易,可以暂时的将他设定为 On ,如此一来你的程序问题会在浏览器上面
    # 直接显示出来,你不需要进入 /var/log/httpd/error_log 登录当中查阅。
    # 但程序调试完成后,记得将此设定值改为 Off !重要重要!
    
    # PHP提供的上传容量限制
    [root@www ~]# vim /etc/php.ini
    post_max_size = 20M       <==大约在 729 行左右
    file_uploads = On         <==一定要是 On 才行 (预设值)
    upload_max_filesize = 16M <==大约在 878 行左右
    memory_limit = 128M       <==PHP 可用记忆体容量也能修订!
    

    启动Apache服务

    [root@www ~]# /etc/init.d/httpd start       <==立刻启动!
    [root@www ~]# /etc/init.d/httpd configtest  <==测试设定档语法
    [root@www ~]# chkconfig httpd on            <==开机启动 WWW 啦!
    
    #另外一种启动方法
    [root@www ~]# /usr/sbin/apachectl start  <==启动啦!
    [root@www ~]# /usr/sbin/apachectl stop   <==关闭 WWW 啦!
    
    #测试PHP安装是否正确,首先编辑如下文件内容:
    [root@www ~]# vim /var/www/html/phpinfo.php
    <?php  phpinfo ();  ?>
    #然后访问:http://$IP/phpinfo.php 
    

    mysql配置

    [root@www ~]# /etc/init.d/mysqld start
    [root@www ~]# chkconfig mysqld on
    # 如果是初次启动,萤幕会显示一些讯息且 /var/lib/mysql 会建立资料库。
    
    [root@www ~]# netstat -tulnp | grep 'mysql'
    Proto Recv-Q Send-Q Local Address  Foreign Address   State   PID/Program name
    tcp        0      0 0.0.0.0:3306   0.0.0.0:*         LISTEN  2726/mysqld
    
    # 底下在测试看能否以手动的方式连上 MySQL 资料库!
    [root@www ~]# mysql -u root
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.1.52 Source distribution
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    mysql> exit
    Bye
    
    [root@www ~]# mysqladmin -u root password 'your.password'
    # 从此以后 MySQL 的 root 帐号就需要密码了!如下所示:
    [root@www ~]# mysql -u root -p
    Enter password:  <==你必须要在这里输入刚刚建立的密码!
    mysql> exit
    
    #不同的管理者使用不同的数据库
    [root@www ~]# mysql -u root -p
    Enter password:  <==如前所述,你必须要输入密码嘛!
    mysql> create database jet;  <==注意每个指令后面都要加上分号 (;)
    Query OK, 1 row affected (0.01 sec)
    mysql> grant all privileges on jetdb.* to jetuser@localhost 
    identified by 'vbirdpw' ;
    Query OK, 0 rows affected (0.00 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              | <==用来记录 MySQL 帐号、主机等重要资讯的主要资料库!
    | test               | 
    | jet            | <==我们刚刚建立的资料库在此
    +--------------------+
    4 rows in set (0.00 sec)
    mysql> use mysql;
    mysql> select * from user where user = 'jetuser';
    # 上面两个指令在查询系统有没有 jetuser 这个帐号,若有出现一堆东西,
    # 那就是查询到该帐号了!这样就建置妥当了!
    mysql> exit
    
    #mysql的性能调优
    
    [root@www ~]# vim /etc/my.cnf
    [mysqld]
    default-storage-engine=innodb
    # 关于目录资料与语系的设定等等;
    default-character-set   = utf8   <==每个人的编码都不相同,不要随意跟我一样
    port                    = 3306
    skip-locking
    # 关于内存的设定,注意,内存占用的简单计算方式为:
    # key_buffer + (sort_buffer + read_buffer ) * max_connection
    # 且总量不可高于实际的实体记忆体量!所以,我底下的资料应该是 OK 的
    # 128 + (2+2)*150 = 728MB
    key_buffer              = 128M
    sort_buffer_size        = 2M
    read_buffer_size        = 2M
    join_buffer_size        = 2M
    max_connections         = 150
    max_connect_errors      = 10
    read_rnd_buffer_size    = 4M
    max_allowed_packet      = 4M
    table_cache             = 1024
    myisam_sort_buffer_size = 32M
    thread_cache            = 16
    query_cache_size        = 16M
    tmp_table_size          = 64M
    # 由连线到确定断线的时间,原本是 28800 (sec) ,约 8 小时,我将他改为 20 分钟!
    wait_timeout            = 1200
    thread_concurrency      = 8
    innodb_data_file_path = ibdata1:10M:autoextend
    innodb_buffer_pool_size = 128M
    innodb_additional_mem_pool_size = 32M
    innodb_thread_concurrency = 16
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    symbolic-links=0
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    https站点部署

    制作自制凭证

    # 1. 先到 /etc/pki/tls/certs 去建立一把给 Apache 使用的私钥档案:
    [root@www ~]# cd /etc/pki/tls/certs
    [root@www certs]# make jet.key
    umask 77 ; /usr/bin/openssl genrsa -aes128 2048 > jet.key  <==其实是这个指令
    Generating RSA private key, 2048 bit long modulus
    .................................................................+++
    ...............................+++
    e is 65537 (0x10001)
    Enter pass phrase:  <==这里输入这把私钥的密码,需要多于四位!
    Verifying - Enter pass phrase:  <==再一次!
    
    # 2. 将刚刚建立的档案中,里面的密码取消掉!不要有密码存在!
    [root@www certs]# mv jet.key jet.key.raw
    [root@www certs]# openssl rsa -in jet.key.raw -out jet.key
    Enter pass phrase for jet.key.raw: <==输入刚刚的密码!
    writing RSA key
    [root@www certs]# rm -f jet.key.raw  <==旧的私钥档移除
    [root@www certs]# chmod 400 jet.key  <==权限一定是 400 才行!
    
    # 3. 建置所需要的最终凭证档!
    [root@www certs]# make jet.crt SERIAL=2020032601
    umask 77 ; /usr/bin/openssl req -utf8 -new -key jet.key -x509 -days 365 
    -out jet.crt -set_serial 2020032601  <==可以加入日期序号
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    -----
    Country Name (2 letter code) [XX]:BJ
    State or Province Name (full name) []:BeiJing
    Locality Name (eg, city) [Default City]:BeiJing
    Organization Name (eg, company) [Default Company Ltd]:TEST
    Organizational Unit Name (eg, section) []:TEST
    Common Name (eg, your name or your server's hostname) []:www.centos.jet
    Email Address []:jet@www.centos.jet
    
    [root@www certs]# ll jet*
    -rw-------. 1 root root 1419 2020-03-26 15:24 vbird.crt  <==最终凭证档!
    -r--------. 1 root root 1679 2020-03-26 15:22 vbird.key  <==系统私钥档
    
    # 修改SSL配置,使用自制的私钥和证书
    [root@www ~]# vim /etc/httpd/conf.d/ssl.conf
    SSLCertificateFile /etc/pki/tls/certs/jet.crt    <==约在 105 行
    SSLCertificateKeyFile /etc/pki/tls/certs/jet.key <==约在 112 行
    [root@www ~]# /etc/init.d/httpd restart
    
    # 将http与https相分离
    # 1. 处理目录与预设的首页 index.html 档案:
    [root@www ~]# mkdir /var/www/https
    [root@www ~]# echo "This is https' home" > /var/www/https/index.html
    
    # 2. 开始处理 ssl.conf 的内容!
    [root@www ~]# vim /etc/httpd/conf.d/ssl.conf
    Listen 443                      <==预设的监听端口!不建议修改!
    <VirtualHost _default_:443>     <==就是虚拟主机的设定!
    DocumentRoot "/var/www/https"   <==约84行,拿掉注解改掉目录名称
    ServerName *:443                <==拿掉注解,并将主机名称设定为 *
    SSLEngine on                    <==有支持 SSL 的意思!
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/pki/tls/certs/jet.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/jet.key
    </VirtualHost>
    
    [root@www ~]# /etc/init.d/httpd restart
    
    
  • 相关阅读:
    添加定界符: AnsiQuotedStr
    c++ builder 中的 XMLDocument 类详解(13) 遍历XML文件
    c++ builder 中的 XMLDocument 类详解(11) 读取和设置版本号
    c++ builder 中的 XMLDocument 类详解(9) 关于 HasChildNodes 与 IsTextElement
    VBA 宏 与 Word 编程
    Iframe 高度自适应!
    第一次加载控件的问题.
    Server.Transfer 页面传值.
    Ajax 动态加载 用户控件脚本报 "缺少对象" 的错误!
    GridView的 RowCreated 里不能写有关控件的客户端事件属性!!
  • 原文地址:https://www.cnblogs.com/wangzengyi/p/12545123.html
Copyright © 2020-2023  润新知