• centos从头学习配置web服务器环境


    为了学习linux下配置web服务器环境,于是安装了vmware,准备在虚拟机里面学习web服务器的搭建!

    首先是在虚拟机里安装centos,我选择的是32位的centos6.6版本,因为新版本7据说更改了好多命令,况且是新版本,于是没有采用!

    至于选择32位的是因为我回头的vps的环境最大也就是2G(没有毛爷爷啊...) 所以就选择了32位的!

    虚拟机安装centos基本上没啥说的,一直next就行了!(PS:vmware11 真心不错...)

    -----------------------------------------------------------------------------   关闭GUI  ----------------------------------------------------------------------------------

    安装成功之后,为了学习命令行,肯定是先关闭xwindow,也就是关闭GUI

    操作就是编辑/etc/inittab文件 将id:5:initdefault: 改成 id:3:initdefault:

    然后reboot就会进入命令行模式了!

    -----------------------------------------------------------------------------   分辨率配置  ----------------------------------------------------------------------------------

    进入命令行以后发现显示的界面很小,稍微长一点的内容都会换行,于是更改命令行下的分辨率:

    操作就是编辑/boot/grub/menu.lst文件,在kernel开头的那一行添加vga参数:

    如果不知道自己分辨率的值,可以在行为添加vga=ask,这样在每次启动的时候,都会列出所有支持的分辨率让我们选择:

    比如我输入379 就会进入1280*768的分辨率。

    已经改更改了命令行模式以及分辨率,那么首先肯定要先打一下补丁了!

    su
    ******
    yum update

    就是root下使用yum update命令更新系统补丁或者漏洞

    -----------------------------------------------------------------------------   tty设置  ----------------------------------------------------------------------------------

    更新完成后,我们首先关闭多余的tty,tty是啥呢,我看了半天网上的解释,大致感觉就是终端差不多的东西!

    centos默认是开启6个tty的

    不过对于vps来说,我们基本上都是使用putty这一类的来远程连接的,于是我们开启2个tty就可以了!

    具体操作有如下两步:

    1.编辑/etc/init/start-ttys.conf

    将其中开启6个终端的配置改成2个

    就是将[1-6]改成[1-2]

    从上面的脚本看出这个配置文件执行了/etc/sysconfig/init文件,那么就是我们要操作的第2步了

    2.编辑/etc/sysconfig/init文件

    同样的将ACTIVE_CONSOLES改成2个

    reboot后使用ps命令查看当前终端就会只有tty1和tty2了:

    ps aux | grep tty

    -----------------------------------------------------------------------------   IPV6配置  ----------------------------------------------------------------------------------

    然后就是为节省系统资源,关闭ipv6 以及ipv6的防火墙,对于VPS来说使用一个独立的IPV4是最常见的了!

    操作就是编辑/etc/modprobe.d/dist.conf文件,在文件的末尾添加如下两行:

    alias net-pf-10 off
    alias ipv6 off

    然后reboot 使用lsmod | grep ipv6 可以发现ipv6已经关闭了

    然后就是关闭ipv6的防火墙,关闭就是开机不启动了,那就是使用chkconfig命令了

    chkconfig ip6tables off

    这样就关闭了ipv6以及ip6tables了!

    -----------------------------------------------------------------------------   FTP配置  ----------------------------------------------------------------------------------

    然后就是配置ftp了,以方便我们能够上传文档或者代码

    首先就是检查是否已经安装了vsftpd

    rpm -qa | grep vsftpd

    如果没有就安装

    yum install vsftpd

    然后启动vsftpd

    service vsftpd start

    然后可是使用chkconfig命令设置ftp开机启动

    (注:我并没有设置,因为VPS基本上也就我一个人管理,没有必要设置开机启动,就算需要使用ftp,我一般也会通过putty链接后,开启vsftpd ,然后使用结束后,关闭它)

    安装vsftpd后,下面我们就是配置vsftpd了:

    首先肯定是要禁止ftp的匿名登录:

    操作就是编辑/etc/vsftpd/vsftpd.conf文件,设置anonymous_enable=NO,以及启用chroot_list_enable 和 chroot_list_file选项

    然后更改FTP下默认的21端口号  操作就是在vsftpd.conf添加listen_port ****  以及设置启用ftp被动模式和设置被动模式端口范围!

    listen_port ****
    pasv_enable=YES
    pasv_min_port=10020
    pasv_max_port=10040

    然后就是修改/etc/services文件下的ftp的端口号

    然后在/etc/vsftpd下建立chroot_list文件并编辑

    并一行输入一个ftp用户

    然后就是添加ftp用户组:

    groupadd webftp

    然后创建刚才添加的ftp用户(比如test用户):

    useradd -g webftp -M -d /var/www -s /sbin/nologin test

    使用-g参数将它归集到webftp用户组下,-M参数不设置它的主目录(没有-M参数/home里会有个wwwer文件夹,这个文件夹没多少实际用处,所以不用设置),-d参数设定它的初始登入目录为/var/www,-s参数设定它不需要登陆系统/sbin/nologin,它被命名为test。

    补一条命令,如果要修改用户的主目录可以使用usermod命令,语法如下:

    usermod -d /var/www2 username

    然后为这个用户设置密码:

    passwd test

    将目录权限更改为该用户:

    chown -R test.webftp /var/www

     然后重启vsftpd服务

    service vsftpd restart

    现在可以使用netstat -ntlp | grep vsftpd 查看vsftpd监听的端口号是否改变了!

    不过ftp还是不能链接的,因为我们还没有在防火墙里面为更改的端口添加通过的权限:

    操作就是编辑/etc/sysconfig/iptables文件,照葫芦画瓢添加指定的端口就行了!

    然后重启iptables,这样就可以访问ftp了,但是现在只能访问,是不能列出目录的,

    因为selinux的限制,所以我们可以设置allow_ftpd_full_access开启即可!

    setsebool allow_ftpd_full_access on

    而且此代码重启失效,所以对我来说是适用的!

    -----------------------------------------------------------------------------   mysql配置  ----------------------------------------------------------------------------------

    现在可以配置mysql了

    由于centos默认自己已经装了,于是就先卸载已经自带的mysql包

    rpm -qa | grep mysql
    mysql-lib***
    yum remove mysql-lib***

    这样系统自带的mysql就会被删除掉了 没有用rpm -e的强制,不知道那样会不会删除依赖,yum remove 貌似是删除了依赖关系的!

    然后就是安装mysql了,安装没有什么问题,问题就是你选择什么版本了,关于版本选择,网上有很多解释了!我选择的是5.5.42 (PS:貌似大家都在吐槽mysql被oracle收购后出的那个什么版本...)

    安装就没有什么了,rpm -ivh 就OK了

    安装完成后,首先就是开启mysql服务 以及设置mysql开机启动(开机启动自己衡量就行了!)

    service mysql start 
    chkconfig mysql on

    然后就是设置mysql root用户密码以及整理用户什么之类的,mysql内部的语法,大家都懂,就不多说了!

    有一个需要注意的地方就是rpm安装mysql不会在etc下生成my.cnf配置文件,我们需要手动把合适的配置文件复制到etc下

    rpm安装mysql 配置目录在  /usr/share/mysql   然后根据服务器不同的内存配置选择不同的配置文件复制到etc就行了

    我这里选择的是huge 

    cp /usr/share/mysql/my_huge.cnf /etc/my.cnf

    然后就是更改mysql的端口号和防火墙设置:

    更改端口号,因为在selinux下,所以需要更改selinux设置,网上都说使用semanage,

    这个链接是我写的在selinux模式下更改mysql端口:

    http://www.cnblogs.com/waitfate/p/4285859.html 

    内容如下:

    默认情况下 mysql更改端口后是不能通过selinux的

    提示启动错误,那么首先就要看mysql的错误日志

    可是我不知道mysql错误日志的位置

    首先,更改selinux的模式为passive 然后启动mysql(passive模式下是能够启动mysql的)

    setenforce 0

    然后是用ps命令查看日志位置:

    ps ax|grep mysql
    或者
    ps ax|grep "[m]ysql"

    从输出中找到--log-error

    然后打开错误日志

    提示:

    [ERROR] Can't start server: Bind on TCP/IP port: Permission denied
    150210 19:57:52 [ERROR] Do you already have another mysqld server running on port: 3308 ?

    明显是绑定到3308端口的时候提示错误了!

    那么就要更改selinux对mysql开启3308端口

    网上搜索后说是需要使用semanage

    但是centos里面并没有找到semanage命令

    那么查看哪个包提供了semanage

    yum provides /usr/sbin/semanage

    发现是policycoreutils-python包

    于是安装policycoreutils-python包

    yum install policycoreutils-python

    安装完成后,为mysql绑定3308端口

    semanage port -a -t mysqld_port_t -p tcp 3308

    然后设置selinux为强制模式然后重启mysql就可以了

    setenfoce Enforcing
    service mysql restart

    更改端口这点就说到这! 至于防火墙,因为默认防火墙是开启的,我们不添加更改的端口到防火墙,外部是不能够通过修改后的端口连接到数据库的!

    -----------------------------------------------------------------------------   nginx配置  ----------------------------------------------------------------------------------

    下面就开始配置nginx了,因为是服务端软件,肯定要选择稳定版了

    首先去官网下载稳定版(Stable version)的rpm包

    然后rpm -ivh 安装 然后yum install nginx就可以了!(这里并没有自己编译安装!需要自己编译安装的,网上一大把教程...)

    然后检查nginx是否成功:

    service nginx start

    使用外部浏览器访问即可看到welcome了!

    yum方式安装后,nginx的目录在/etc/nginx下,所以配置文件为/etc/nginx/nginx.conf,网站配置文件在/etc/nginx/conf.d下面

     

    下面更改网站目录:

    nginx.conf会加载conf.d下面所有的conf文件

    所以我们编辑default.conf文件更改网站目录!

    设置nginx开机启动

    chkconfig nginx on

    检查配置重启nginx,然后重新访问即可!

    nginx -t
    service nginx restart

    因为我在配置ftp的时候已经配置了80端口能够访问,所以防火墙我这里就没有说配置80端口的事!如果没有开启80端口,使用如下命令开启即可!

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    service iptables save
    service iptables restart

    至此已经可以访问网站的静态页面了!现在还不能解析PHP脚本,因为我们还没有配置使用cgi模式解析PHP

    因为我们还没有安装PHP,等下面安装完PHP再接着写配置nginx使用PHP

    -----------------------------------------------------------------------------   php配置  ----------------------------------------------------------------------------------

    首先就是下载php目前最稳定的版本啦!直达链接:http://php.net/downloads.php 目前最稳定的版本是5.6.6!

    我下载的是tar.gz包

    解压:

    tar -xzvf php-5.6.6.tar.gz

    进入加压后的文件夹,查看配置参数:

    cd php-5.6.6
    ./configure --help

    参数非常多,因为php功能实在太强大了。你熟悉php的话,就知道它有上百个模块,我们常用大概有几十个。通常离不开的模块,是默认被配置进去的,不需要我们通过configure指定,我们在configure步骤主要做两件事:

    • 定义一些路径,如php安装路径,配置文件路径
    • 选择所需的非默认模块

    所以我们的配置项如下:

    为了方便阅读,折行了,这一部分配置我也是从网上找到的
    直达链接:http://blog.path8.net/archives/6068.html
    ./configure
    --prefix=/usr/local/php53
    --with-config-file-path=/usr/local/etc
    --with-config-file-scan-dir=/usr/local/etc/php.d
    --mandir=/usr/local/man
    --enable-fpm
    --enable-calendar
    --with-mcrypt
    --enable-ftp
    --with-zlib
    --with-bz2
    --with-curl
    --with-gd
    --enable-exif
    --with-jpeg-dir
    --with-png-dir
    --with-freetype-dir
    --enable-mbstring
    --with-mysql
    --with-mysqli
    --with-pdo-mysql
    --enable-zip
    --enable-bcmath
    --with-bz2

    但是现在运行configure肯定不能成功,因为我们还缺少下面的依赖关系,安装就行了

    yum -y install libxml2-devel
    yum -y install bzip2-devel
    yum -y install libcurl-devel
    yum -y install libjpeg-devel libpng-devel

    还有mcrypt安装,同php一样configure make makeinstall就行了

    然后就是php的configure了

    这里需要注意的是不要用root去configure和make  用普通用户来执行,执行make install的时候再切换到root

    (我按照网上的配置configure的时候,提示freetype config错误,这个是因为没有安装freetype,如果不安装这个,那么php生成验证码模块

    可能会出现问题,安装freetype很简单 yum install freetype-devel 就可以了!)

    configure可能需要几分钟,make可能需要20分钟,所以现在可以去干点别的了...

    漫长的等待...

    等make install完成,那么php就安装完成了,下面就是配置php的fpm了!什么是fpm呢,就是FastCGI Process Manager FastCGI进程管理器。

    其实就CGI了!

    php安装完毕后,fpm配置文件的位置就是我们配置的 /usr/local/php**/etc/php-fpm.conf

    编辑这个文件更改下面三个参数:

    (约第25行)   pid = /var/run/php-fpm.pid
    (约第32行)   error_log = /var/log/php-fpm.log
    (约第190行) pm = static

    然后启动php-fpm 位置:/usr/local/php**/sbin/php-fpm

    执行应该没有任何提示,如果有错误输出,可以到我们设置的日志/var/log/php-fpm.log查看!

    然后就是配置php-fpm为服务,并设置开机启动!

    将php压缩包解压后的sapi/fpm下的init.d.php-fpm 里面的php_fpm_PID的值改为我们设置的/var/run/php-fpm.pid

    原来的值是${prefix}/var/run/php-fpm.pid(这一个是我自己发现的,因为前面修改了pid位置,所以现在这个文件也要修改,不然启动的时候会一直等待...)

    然后将这个文件复制到/etc/init.d/下面:

    cp init.d.php-fpm /etc/init.d/php-fpm

    然后将php-fpm配置加入chkconfig 并设置开机启动

    chkconfig --add php-fpm
    chkconfig php-fpm on
    reboot

    到此就配置好了php和cgi了,那么现在配置nginx支持php脚本

    打开默认网站的配置文件

    将如下框框内的内容前的注释去掉,并更改fastcgi_param参数脚本路径为网站目录路径:

    然后检查配置,重启nginx,根目录下建立了phpinfo测试文件,然后访问进行测试!

    nginx -t
    service nginx restart

    访问就能看到phpinfo函数的内容了,可以直观的看一下php配置的具体内容了!

    -----------------------------------------------------------------------------   完善环境、优化配置  ----------------------------------------------------------------------------------

    我们从phpinfo里面可以看到,当前php并没有加载php.ini配置文件:

    所以我们需要把编译后的php生产环境的配置文件复制到/usr/local/etc里面去

    cp php.ini-production /usr/local/etc/php.ini

    然后就可以修改php.ini文件,然后重启php-fpm了!

    比如设置默认的时区:

    date.timezone=Asia/Shanghai

    这样重启php-fpm后,所有使用的date函数的地方,默认时区就是我们中国的东八区了!

    然后就是配置nginx开启gzip压缩

    操作就是编辑nginx的配置文件nginx.conf 取消gzip前面的注释:

    gzip on

    然后就是设置上传目录没有php脚本执行权限

    在网站配置文件里面的php配置代码上方加入如下代码:

    location ~ ^/(uploads|images)/.*.php {
            deny  all;
    }

    这样上传目录下的php脚本就不会投递到php-fpm执行了!

    然后就是优化mysql,那么所有的配置基本上就完成了,上传代码吧!

  • 相关阅读:
    window在文件管理器中打开命令行窗口
    js的事件机制
    ext-css
    HTML防止input回车提交表单
    myeclipse调试代码的时候看不到变量的值和jdk源码重新编译
    MANIFEST.MF 文件内容完全详解
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'dll.msvcrt'
    JNA知识点
    cookie 和session 的区别
    6- js监听输入框值的即时变化onpropertychange、oninput
  • 原文地址:https://www.cnblogs.com/waitfate/p/4299828.html
Copyright © 2020-2023  润新知