存档

文章标签 ‘apache’

ubuntu安装apache2+php5+mysql5+vsftpd全程记录

2014年11月4日 没有评论

——————-

date,检测时间
ifconfig,查看ip
—————————-

修改dns
sudo vim /etc/network/interfaces
加入:
dns-nameserver 8.8.8.8 8.8.4.4

执行:sudo resolvconf -u(重新生成/etc/resolv.conf文件)
执行:sudo /etc/init.d/networking restart(重启网络)

修改本地解析
sudo vim /etc/hosts
127.0.0.1 输入IP
127.0.0.1 输入要绑定的域名

ubuntu 修改源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo vim /etc/apt/sources.list
输入:
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

执行:sudo apt-get update

如果无法连接,可以考虑修改ubuntu默认dns(请百度)

sudo apt-get update
sudo apt-get dist-upgrade升级系统,再执行sudo apt-get clean
———————–
开通ssh链接,sudo apt-get install openssh-server
sudo vim /etc/default/locale,查看语言版本,是否为en_US.utf-8
—————-

sudo du -h 目录,查看目录总大小

sudo apt-get install htop

—————–
设置ip
sudo vim /etc/network/interfaces
输入:
auto eth0  
iface eth0 inet static  
address 192.168.2.1
gateway 192.168.2.254
netmask 255.255.255.0
—————————————–

安装apache2:sudo apt-get install apache2

在www下面创建www和mysql

修改apache2配置文件,修改MaxKeepAliveRequests 3000,修改keepAliveTimeout 1200(session有效期)
将:HostnameLookups设置为Off

—————–

找到:IFModule mpm_prefork_module,配置为下:

StartServers 20(apache启动的时候开启主进程数)

MinSpareServers 10(最小进程数)

MaxSpareServers 25(最大进程数)

ServerLimit 10000

MaxClients 8500

MaxRequestsPerChild 200(访问量特别大的时候,可加大子进程数)

—————–

LogLevel crit

隐藏 Apache 版本信息
/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf 或 /etc/apache2/security 或 /etc/apache2/config-enable/security

ServerTokens Prod
ServerSignature Off

修改apache2的默认文件类型:/etc/apache2/mods-enabled/dir.conf

修改apache2的默认主目录为www/webroot
文件为:/etc/apache2/sites-available/default.conf
或者为:/etc/apache2/sites-available/000-default.conf

删除apache2中/etc/apache2/sites-available/default中的文件夹列表,Options indexes Foll ——–中的indexes
【参考内容:】

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /www/webroot/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /www/webroot/>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory “/usr/lib/cgi-bin”>
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        allow from all
        </Directory>

    #ErrorLog “|/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error%Y-%m-%d.log 86400 +480”

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel crit

    #CustomLog “|/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/custom%Y-%m-%d.log 86400 +480” combined

    Alias /doc/ “/usr/share/doc/”
    <Directory “/usr/share/doc/”>
        Options MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.055178.com
    DocumentRoot “/www/webroot/055178.com/www/”
    <Directory /www/webroot/055178.com/www/>
            Options FollowSymLinks MultiViews
            AllowOverride All
            php_admin_value open_base “/www/webroot/055178.com/www:/tmp”
    </Directory>
    #ErrorLog “|/usr/sbin/rotatelogs /www/webroot/055178.com/logs/error%Y-%m-%d.log 86400 +480”
    #CustomLog “|/usr/sbin/rotatelogs /www/webroot/055178.com/logs/custom%Y-%m-%d.log 86400 +480” combined
</VirtualHost>

需要注意的是,如果是apache 2.4,那么需要更改为:(而且每个虚拟主机都要加一个Require all granted)

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /www/webroot/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /www/webroot/>
        Options FollowSymLinks MultiViews
        AllowOverride All
        #Order allow,deny
        #allow from all
        Require all granted
        </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory “/usr/lib/cgi-bin”>
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        #Order allow,deny
        #allow from all
        Require all granted
        </Directory>

    #ErrorLog “|/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/error%Y-%m-%d.log 86400 +480”

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel crit

    #CustomLog “|/usr/sbin/rotatelogs ${APACHE_LOG_DIR}/custom%Y-%m-%d.log 86400 +480” combined

    Alias /doc/ “/usr/share/doc/”
    <Directory “/usr/share/doc/”>
        Options MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.055178.com
    DocumentRoot “/www/webroot/055178.com/www/”
    <Directory /www/webroot/055178.com/www/>
            Options FollowSymLinks MultiViews
            AllowOverride All
        Require all granted
            php_admin_value open_base “/www/webroot/055178.com/www:/tmp”
    </Directory>
    #ErrorLog “|/usr/sbin/rotatelogs /www/webroot/055178.com/logs/error%Y-%m-%d.log 86400 +480”
    #CustomLog “|/usr/sbin/rotatelogs /www/webroot/055178.com/logs/custom%Y-%m-%d.log 86400 +480” combined
</VirtualHost>

—————————–

改变/www/webroot用户组为www-data:chown www-data:www-data /www/webroot -R

在文件后面加上:ServerName 127.0.0.1 防止重启报:could not reliably determin the … 127.0.0.1错误

可能会出现:invalid common php_admin_value错误,可以:
那是因为你没装php

———-
开启重写
sudo a2enmod rewrite

开启防攻击
sudo apt-get install libapache2-mod-evasive
/etc/apache2/mods-enabled/evasive.conf
加入:
<IFmodule mod_evasive20.c>
    DOSHashTableSize        3097
    DOSPageCount            1
    DOSSiteCount            100
    DOSPageInterval         1
    DOSSiteInterval         1
    DOSBlockingPeriod       20
    DOSWhitelist            127.0.0.1
    DOSLogDir               “/var/lock/mod_evasive”
</IfModule>

将不必要的so注释
status
negotiation
env

编辑mpm_prefork.conf
<IfModule mpm_prefork_module>
    StartServers            20
    MinSpareServers        5
    MaxSpareServers        10
    ServerLimit             3200
    MaxRequestWorkers    1000
    MaxConnectionsPerChild  800
</IfModule>

【【【附带:实时检测HTTPD连接数:watch -n 1 -d “pgrep httpd|wc -l”】】】

—————————————–

安装php

sudo apt-get install libapache2-mod-php5 php5 php5-gd php5-mysql php5-xcache
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

修改/etc/php5/apache2/php.ini:

1,short_open_tag = Off
2,error_reporting = ~E_NOTICE
3,post_max_size = 20M
4,upload_max_filesize = 4M
5,date.timezone = PRC
6,expose_php Off

找到disable_functions
改为:
phpinfo,mail,sleep,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,system,exec,exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,dl,popen,popen,pcntl_exec,socket_accept,socket_bind,socket_clear_error,socket_close,socket_connect,socket_create_listen,socket_create_pair,socket_create,socket_get_option,socket_getpeername,socket_getsockname,socket_last_error,socket_listen,socket_read,socket_recv,socket_recvfrom,socket_select,socket_send,socket_sendto,socket_set_block,socket_set_nonblock,socket_set_option,socket_shutdown,socket_strerror,socket_write,stream_socket_client,stream_socket_server,pfsockopen,disk_total_space,disk_free_space,chown,diskfreespace,getrusage,get_current_user,getmyuid,getmypid,dl,leak,listen,chgrp,link,symlink,dlopen,proc_nice,proc_get_stats,proc_terminate,shell_exec,sh2_exec,posix_getpwuid,posix_getgrgid,posix_kill,ini_restore,mkfifo,dbmopen,dbase_open,filepro,filepro_rowcount,posix_mkfifo,putenv,

————————————-

 安装ImageMagic扩展(可以考虑先不装?运行phpmyadmin,如有提示,再试)

采用pear方式安装
I. 安装ImageMagick
sudo apt-get install imagemagick

II. 安装imagemagick 的lib 供php调用
sudo apt-get install libmagick++-dev

III. 调用当前的pecl安装imagick
pecl install imagick

IV. 修改php.ini.重启apache服务器
在php.ini中添加: extension = imagick.so

—————————————–

安装mysql

sudo apt-get install mysql-server mysql-client

配置mysql如下:

1,query_cache_limit = 100M
2,query_cache_size  = 1024M
3,max_allowed_packet
4,key_buffer
5,max_connections = 12000,设为大于或等于ServerLimit 10000(用mysql_pconnet)最大不能超过16384,如果没有,自行添加
注释掉log_error
6,转移mysql数据库目录:
    1,sudo service mysql stop
    2,sudo cp -R -P /var/lib/mysql /www/mysql
    【第二步请注意,务必不要事先sudo mkdir /www/mysql,直接使用上面的方法,会自动创建,否则会导致无法启动】
    3,sudo chown mysql:mysql /www/mysql -R
    4,修改/etc/mysql/my.cnf中的datadir=/www/mysql
    4,sudo vim /etc/apparmor.d/usr.sbin.mysqld【/var/lib/mysql r, 改为 /www/mysql r,】【/var/lib/mysql/** rwk,  改为  /www/mysql/** rwk,】
    5,sudo /etc/init.d/apparmor reload
    5,sudo service mysql start
    6,[mysqld]增加:default-storage-engine=MyISAM(登陆后,show engines;查看)

    登陆后,修改默认编码
    —set character_set_client=utf8;
    —set character_set_connection=utf8;
    —set character_set_database=utf8;
    —set character_set_results=utf8;
    —set character_set_server=utf8;
    —set character_set_filesystem=utf8;
    —set character_set_database=utf8;
    —set character_set_server=utf8;
   
    —set collation_server=utf8;(mysql 5.5 报错,但不影响)
    —set collation_database=utf8;(mysql 5.5 报错,但不影响)
    —set collation_connection=utf8;(mysql 5.5 报错,但不影响)
        
    【命令:
        show variables like ‘character_set_%’;
        show variables like ‘collation_%’;
    】
7,安装mcrypt extension
sudo apt-get install php5-mcrypt

8,开启远程连接:
注释掉my.cnf中的:bind-address 一行
同时建议,在[mysqld]下面增加skip-name-resolve
可以解决远程连接比较慢的问题(类似报错:Lost connection to MySQL server at ‘waiting for initial communication packet’)

如果卸载mysql后重新安装,打开php链接mysql提示找不到mysqli,请重新输入:sudo apt-get install libapache2-mod-php5 php5 php5-gd php5-mysql,将自动加载mysql

9,其它部分优化
确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数;
确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数; (新版是:skip-external-locking)
如果不需要的话,可以将二进制日志(binlog)停掉,方法是将“log-bin”注释掉;

参考:http://imysql.com/2014/09/28/mysql-optimization-case-blob-stored-in-innodb-optimization.shtml

———————————

配置ftp

sudo apt-get install vsftpd

cd /etc
sudo cp -r vsftpd.conf vsftpd.conf.backup
sudo mkdir vsftpd.users

1,sudo vi /etc/vsftpd.conf
配置如下:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessages_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
#xferlog_file=/var/log/vsftpd.log(可以注释)
xferlog_std_format=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

【上方默认基本存在,下方为添加:】

max_clients=10(#FTP服务器最大承载用户)
max_per_ip=5 (#限制每个IP的进程)
pasv_enable=YES(是否允许被动模式登陆)
pasv_min_port=9981
pasv_max_port=9986
port_enable=YES
user_config_dir=/etc/vsftpd.users(单个用户配置文件,以用户名命名文件)
anon_max_rate=0
local_max_rate=5120000
guest_enable=YES(#如果ftp用户名不是ubuntu系统用户的话,必须开启)
guest_username=www-data
virtual_use_local_privs=YES

安装db-util数据库软件
sudo apt-get install db-util

cd ~
创建ftp_users.txt,测试内容如下:
rootuser
123

sudo db_load -T -t hash -f ftp_users.txt /etc/vsftpd_login.db
sudo chmod 600 /etc/vsftpd_login.db


修改/etc/pam.d/vsftpd,内容如下:

注释掉所有

增加如下:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login(后缀.db省略了)
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login(后缀.db省略了)

到/etc/vsftpd.users下新建:rootuser文件,内容如下:local_root=/www/webroot/

自vsftpd2.3.5版本,根目录无写权限,如果有写权限,会提示无法登陆,解决:sudo chmod a-w /www/webroot

如果提示:500 OOPS: cannot change directory:/var/www
请在在/var下创建www

重启 sudo service vsftpd restart,生效

———————————

下面配置内容如下:

【服务器防DDos攻击】

【开启gzip完整版】

【mysql缓存】

【HostnameLookups设置为off】

【启用mod_proxy做正向代理、反向代理】

【apache开启mod_cache缓存】

【apache不记录图片日志】

————————————–

【memcached】

由于memcached与客户端的通信是借助libevent来实现的,所以安装memcached前一定要先安装libevent. 下载解压,安装libevent

mkdir ~/src

cd ~/src

wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

tar xzvf libevent-2.0.21-stable.tar.gz

cd libevent-2.0.21-stable

./configure –prefix=/usr

(此步出错:no acceptable c compiler found in path)
可以使用:sudo apt-get install gcc

make

可能会让装make,执行sudo apt-get install make

sudo make install

cd ..

2.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent

安装memcached:

sudo apt-get install memcached
sudo memcached -d -m 128 -p 11211 -u root,启动服务

这里需要说明一下memcached服务的启动参数:

-p **的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助2)安装Memcache客户端

sudo apt-get install php5-memcache

安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:

[Memcache]
memcache.allow_failover = On
memcache.max_failover_attempts = 20
memcache.chunk_size = 8192
memcache.default_port = 11211

查看状态:telnet 127.0.0.1 11211

php测试:
<?php
$mem = new Memcache; //创建Memcache对象
$mem->connect(“127.0.0.1”, 11211) or die (“Could not connect”); //连接Memcache服务器
$val = “这是一个Memcache的测试.”;
$key = md5($val);
$mem->set($key, $val, 0, 120); //增加插入一条缓存,缓存时间为120s
echo $mem->get($key);
die(“<br>done”);
?>

—————————–

彻底删除
sudo apt-get autoremove –purge 软件名称

清理:
sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoclean

——————-

mod_expires

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/ico “access plus 1 year”
ExpiresByType image/icon “access plus 1 year”
ExpiresByType text/html A300
ExpiresByType text/plain A300
ExpiresByType text/css A3600
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpgg A604800
ExpiresByType image/jpeg A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType application/javascript “access plus 1 week”
ExpiresByType application/x-javascript “access plus 1 week”
ExpiresDefault “access plus 1 days”
</IfModule>

——————————

linux开启系统日志或者关闭不需要的日志

sudo vim /etc/rsyslog.d/50-default.conf

将需要的开启,不需要的注释就可以了。

重启rsyslog:

sudo /etc/init.d/rsyslog restart

分类: ubuntu高手 标签: , , , ,
css.php