Linux Http Server

原创
2015/01/25 23:33
阅读数 153
Apache是目前最主流的网站开发平台,开放源代码,跨平台应用,支持Perl, PHP, Python,Java等多种网页编程语言,模块化定制,灵活,具有相对较好的安全性
yum 安装httpd

查看主配置
[root@Alicia named]# vi /etc/httpd/conf/httpd.conf 
 33 ### Section 1: Global Environment
 44 ServerTokens OS 
 57 ServerRoot "/etc/httpd" 
 63 PidFile run/httpd.pid 
 68 Timeout 120 
 74 KeepAlive Off 
 81 MaxKeepAliveRequests 100 
 87 KeepAliveTimeout 15 
100 <IfModule prefork.c>                                      
101 StartServers       8                启动8个进程                                
102 MinSpareServers    5                至少保持5个空闲的进程            
103 MaxSpareServers   20                最多保持20个空闲的进程                      
104 ServerLimit      256                服务器限制                      
105 MaxClients       256                进程最多响应256个                      
106 MaxRequestsPerChild  4000           一个客户端要开好几个页面,是子进程                      
107 </IfModule>  
134 Listen 80 
210 Include conf.d/*.conf 
231 User apache                                               
232 Group apache  
234 ### Section 2: 'Main' server configuration 
251 ServerAdmin root@localhost 
265 #ServerName www.example.com:80 
274 UseCanonicalName Off 
281 DocumentRoot "/var/www/html" 
291 <Directory />                                             
292     Options FollowSymLinks                                
293     AllowOverride None                                    
294 </Directory>  
306 <Directory "/var/www/html">  
320     Options Indexes FollowSymLinks 
327     AllowOverride None 
332     Order allow,deny                                      
333     Allow from all                                        
334                                                           
335 </Directory> 
349 <IfModule mod_userdir.c>
355     UserDir disable                                                    
362     #UserDir public_html                                  
363                                                           
364 </IfModule> 
472 ErrorLog logs/error_log 
524 ServerSignature On 
570 <Directory "/var/www/cgi-bin">                            
571     AllowOverride None                                    
572     Options None                                          
573     Order allow,deny                                      
574     Allow from all                                        
575 </Directory> 
985 #<VirtualHost *:80>                                       
986 #    ServerAdmin webmaster@dummy-host.example.com         
987 #    DocumentRoot /www/docs/dummy-host.example.com        
988 #    ServerName dummy-host.example.com                    
989 #    ErrorLog logs/dummy-host.example.com-error_log       
990 #    CustomLog logs/dummy-host.example.com-access_log common
991 #</VirtualHost>

增加一个主页启动apache:

[root@Alicia named]# vi /var/www/html/index.html 

  1 <html>
  2     Welcome to alicia web page!!
  3 </html>
[root@Alicia named]# service httpd restart
Stopping httpd: [FAILED]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[  OK  ]


[root@Alicia named]# vi /etc/httpd/conf/httpd.conf 
265 ServerName www.alicia.net:80
[root@Alicia named]# !ser
service httpd restart
Stopping httpd: [  OK  ]
Starting httpd: [  OK  ]

基于个人用户

[root@Alicia named]# vi /etc/httpd/conf/httpd.conf
349 <IfModule mod_userdir.c>
350     #
351     # UserDir is disabled by default since it can confirm the presence
352     # of a username on the system (depending on home directory
353     # permissions).
354     #
355     #UserDir disable                          注释掉
356 
357     #
358     # To enable requests to /~user/ to serve the user's public_html
359     # directory, remove the "UserDir disable" line above, and uncomment
360     # the following line instead:
361     #                                                     
362     UserDir public_html                       启用公有目录
363                                                           
364 </IfModule>
test:
mkdir /home/dh/public_html
vi /home/dh/public_html/index.html
hi, i am dh
chmod 755 -R /home/dh/public_html
http://192.168.0.111/~dh
hi, i am dh
避免用户出现在url中
[root@Alicia html]# cd /var/www/html
[root@Alicia html]# ln -s /home/dh/public_html/ linux
http://192.168.0.111/linux
hi, i am dh

基于域名的虚拟主机

首先配置DNS,使得本机能解析两个域名为同一个本机地址,加个区数据文件,或者一个A记录就好
[root@Alicia dh]# nslookup www.hding
Server:         192.168.0.111
Address:        192.168.0.111#53

Name:   www.hding
Address: 192.168.0.111

[root@Alicia dh]# nslookup www.alicia.net
Server:         192.168.0.111
Address:        192.168.0.111#53

Name:   www.alicia.net
Address: 192.168.0.111

这样访问http://www.hding,  http://www.alicia.net实际上就是http://192.168.0.111:80

据不同域名访问不同内容
[root@Alicia html]# vi /etc/httpd/conf/httpd.conf 
 973 NameVirtualHost *:80
 993 <VirtualHost *:80>
 994     ServerAdmin dh@ailcia.net
 995     DocumentRoot /var/www/html/alicia
 996     ServerName www.alcia.net
 997     ErrorLog logs/dummy-host.alicia.com-error_log
 998     CustomLog logs/dummy-host.alicia.com-access_log common
 999 </VirtualHost>
1000 
1001 <VirtualHost *:80>
1002     ServerAdmin dh@ailcia.net
1003     DocumentRoot /var/www/html/hding
1004     ServerName www.hding
1005     ErrorLog logs/dummy-host.hding.com-error_log
1006     CustomLog logs/dummy-host.hding.com-access_log common
1007 </VirtualHost>
建立相应目录和文件
[root@Alicia dh]# cd /var/www/html/
[root@Alicia html]# mkdir hding alicia
[root@Alicia html]# vi hding/index.html

  1 hi, i am alicia here
~                                                                                       
"hding/index.html" [New] 1L, 21C written                      
[root@Alicia html]# vi alicia/index.html

  1 hi, i am alicia here

客户端测试

http://www.hding
hi, i am hding here 
http://www.alicia.net
hi, i am alicia here

相同IP不同端口,相同端口不同IP的主机实现

[root@Alicia html]# ifconfig eth0:0 192.168.0.119
[root@Alicia html]# vi /etc/httpd/conf/httpd.conf 
 134 Listen 80
 135 Listen 81
 136 Listen 82
1011 <VirtualHost 192.168.0.111:81>
1012     DocumentRoot /var/www/html/html1
1013     Servername www.alicia.net
1014 </VirtualHost>
1015 
1016 <VirtualHost 192.168.0.119:81>
1017     DocumentRoot /var/www/html/html2
1018     Servername www.alicia.net
1019 </VirtualHost>
1020 
1021 <VirtualHost 192.168.0.119:82>
1022     DocumentRoot /var/www/html/html3
1023     Servername www.alicia.net                            
1024 </VirtualHost>

源代码编译安装:

cd ../apr-1.4.6
./configure --prefix=/usr/local/apr/
make&&make install
安装apr-util
cd ../apr-util-1.5.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make&&make install
安装pcre
unzip -o pcre-8.32.zip
cd ../pcre-8.32
./configure --prefix=/usr/local/pcre
make&&make install
[root@Alicia httpd-2.4.3]# ./configure --prefix=/usr/local/apache2 --with-apr=/
usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/
 --with-include-apr --enable-so --enable-rewrite
[root@Alicia httpd-2.4.3]#make
[root@Alicia httpd-2.4.3]#make install
[root@Alicia httpd-2.4.3]# ll /usr/local/apache2/
total 56
drwxr-xr-x  2 root root  4096 Jan 15 03:00 bin
drwxr-xr-x  2 root root  4096 Jan 15 03:00 build
drwxr-xr-x  2 root root  4096 Jan 15 03:00 cgi-bin
drwxr-xr-x  4 root root  4096 Jan 15 03:00 conf
drwxr-xr-x  3 root root  4096 Jan 15 03:00 error
drwxr-xr-x  2 root root  4096 Jan 15 00:22 htdocs
drwxr-xr-x  3 root root  4096 Jan 15 03:00 icons
drwxr-xr-x  2 root root  4096 Jan 15 03:00 include
drwxr-xr-x  2 root root  4096 Jan 15 03:00 logs
drwxr-xr-x  4 root root  4096 Jan 15 03:00 man
drwxr-xr-x 14 root root 12288 Aug 17  2012 manual
drwxr-xr-x  2 root root  4096 Jan 15 03:00 modules
[root@Alicia]# /usr/local/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
[root@Alicia apache2]# vi /usr/local/apache2conf/httpd.conf 

 53 Listen 8080
144 LoadModule userdir_module modules/mod_userdir.so 
455 # User home directories
456 Include conf/extra/httpd-userdir.conf
[root@Alicia apache2]# vi /home/dh/public_html/index.html

  1 hi, i am dh, I am using apache2 for test!
[root@Alicia apache2]# /usr/local/apache2/bin/apachectl restart

客户端测试:

http://www.alicia.net:8080
It Works
http://www.alicia.net:8080/~dh
hi, i am dh, i am using apache2 for test
创建一个软链接,来避免用户出现在URL中
[root@Alicia apache2]# cd /var/www/html/
[root@Alicia html]# ln -s /home/dh/public_html/ linux
lrwxrwxrwx  1 root root    21 Jan 15 03:42 linux -> /home/dh/public_html/

LAMP

mysql安装

groupadd mysql
useradd -g mysql mysql
cd mysql-5.0.18
./configure --prefix=/usr/local/mysql --without-debug --enable-thread-safe-client --with-pthread --enable-assembler --enable-profilling --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-charset=utf8 --with-extra-charsets=all --with-plugins=all --with-mysqld-user=mysql --without-embedded-server --with-server-suffix=-community --with-unix-socket-path=/tmp/mysql.sock
make&&make install
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
vi /etc/my.cnf
 18 [client]
 19 #password   = your_password
 20 port        = 3306
 21 socket      = /tmp/mysql.sock
 22 
 23 default-character-set=utf8
 27 [mysqld]
 28 port        = 3306
 29 socket      = /tmp/mysql.sock
 30 skip-locking
 31 key_buffer = 16M
 32 max_allowed_packet = 1M
 33 table_cache = 64
 34 sort_buffer_size = 512K
 35 net_buffer_length = 8K
 36 read_buffer_size = 256K
 37 read_rnd_buffer_size = 512K
 38 myisam_sort_buffer_size = 8M
 39 character-set-server=utf8
 40 collation-server=utf8_general_ci
 41 default-storage-engine=innodb	
123 innodb_data_home_dir = /usr/local/mysql/var/
124 innodb_data_file_path = ibdata1:10M:autoextend
125 innodb_log_group_home_dir = /usr/local/mysql/var/
126 #innodb_log_arch_dir = /usr/local/mysql/var/
127 # You can set .._buffer_pool_size up to 50 - 80 %
128 # of RAM but beware of setting memory usage too high
129 innodb_buffer_pool_size = 16M
130 innodb_additional_mem_pool_size = 2M
131 # Set .._log_file_size to 25 % of buffer pool size
132 innodb_log_file_size = 5M
133 innodb_log_buffer_size = 8M
134 innodb_flush_log_at_trx_commit = 1
135 innodb_lock_wait_timeout = 50
/usr/local/mysql/bin/mysql_install_db --user=mysql
cd /usr/local/mysql/shard/mysql
cp mysql.server /etc/init.d/mysqld
service mysqld restart
/usr/local/mysql/bin/mysqladmin -uroot password password
[root@Alicia mysql]# bin/mysql -u root -ppassword
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 5.0.18-community-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.06 sec)

mysql>
PHP
安装 libxml2
cd /lamp/libxml2-2-2.9.0
./configure --prefix=/usr/local/libxml2/
make&&make instally
安装libmcrypt
cd ../libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt/
make&&make install
安装libltdl
cd ../libmcrypt-2.5.8/libltdl/
./configure --enable-ltdl-install
make&&make install
安装zlib
cd ../zlib-1.2.7
./configure
make&&make install
安装libpng
cd ../libpng-1.5.14
./configure --prefix=/usr/local/libpng/
make&&make install
安装jpeg
cd ../jpeg-8b/
mkdir /usr/local/jpeg8
mkdir /usr/local/jpeg8/bin
mkdir /usr/local/jpeg8/lib
mkdir /usr/local/jpeg8/include
mkdir /usr/local/jpeg8/man/man1
./configure --prefix=/usr/local/jpeg8/ --enable-shared --enable-static
make&&make install
安装freetype
cd ../freetype-2.4.10
./configure --prefix=/usr/local/freetype/
make&&make install
安装autoconf
cd ../autoconf-2.69
./configure
make&&make install
安装gd
mkdir /usr/local/gd2
cd ../gd2.0.35
./configure --prefix=/usr/local/gd2/ --with-jpeg=/usr/local/jpeg8/ --with-freetype=/usr/local/freetype/
make&&make install
cd  ../php-5.4.11
 ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql/ --with-libxml-dir=/usr/local/libxml2/ --with-jpeg-dir=/usr/local/jpeg8/ --with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd2/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets
make
make install

PHP与apache连接

[root@Alicia php-5.4.11]# vi /usr/local/apache2/conf/httpd.conf
376     AddType application/x-httpd-php .php .phtml .phs
[root@Alicia php-5.4.11]# vi /usr/local/apache2/htdocs/test.php

  1 <?
  2     phpinfo();
  3 ?> 
[root@Alicia php-5.4.11]# /usr/local/apache2/bin/apachectl restart
httpd not running, trying to start
https server:

准备CA服务器:

[root@Alicia certs]# vi /etc/pki/tls/openssl.cnf 
 45 dir     = /etc/pki/CA       # Where everything is kept
 87 [ policy_match ]                              
 88 countryName     = optional
 89 stateOrProvinceName = optional
 90 organizationName    = optional
134 [ req_distinguished_name ]                    
135 countryName         = Country Name (2 letter code)
136 countryName_default     = CN
137 countryName_min         = 2                   
138 countryName_max         = 2                   
139                                               
140 stateOrProvinceName     = State or Province Name (full name)
141 stateOrProvinceName_default = Shanghai
142                                               
143 localityName            = Locality Name (eg, city)
144 localityName_default        = Shanghai
[root@Alicia certs]# cd /etc/pki/CA
[root@Alicia CA]# mkdir crl
[root@Alicia CA]# mkdir certs
[root@Alicia CA]# mkdir newcerts
[root@Alicia CA]# touch serial
[root@Alicia CA]# echo "01" > serial
[root@Alicia CA]# touch index.txt
[root@Alicia CA]# openssl genrsa 1024 > private/cakey.pem
Generating RSA private key, 1024 bit long modulus
...++++++
...++++++
e is 65537 (0x10001)
[root@Alicia CA]# chmod 600 private/cakey.pem 
[root@Alicia CA]# openssl req -new -key private/cakey.pem -x509 -ou
t cacert.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [Shanghai]:
Locality Name (eg, city) [Shanghai]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:qa
Common Name (eg, your name or your server's hostname) []:
Email Address []:
web https server所需要的证书
web server ca:
[root@Alicia apache2]# mkdir certs
[root@Alicia apache2]# cd certs/
[root@Alicia certs]# openssl genrsa 1024 > httpd.key         使用长度为1024的非对称加密算法rsa,重定向到存放私钥的文件httpd.key中
Generating RSA private key, 1024 bit long modulus
.................++++++
.................................++++++
e is 65537 (0x10001)
[root@Alicia certs]# openssl req -new -key httpd.key -out httpd.csr
利用存放私钥的文件httpd.key请求得到一个证书请求,请求产生的文件叫httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:cn
State or Province Name (full name) [Berkshire]:sh
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:qa
Common Name (eg, your name or your server's hostname) []:alicia.net
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@Alicia certs]# openssl ca -in httpd.csr -out httpd.cert
利用ca产生一个证书,请求文件是当前目录下的httpd.csr,申请一个证书httpd.cert
[root@Alicia certs]# ll
total 12
-rw-r--r-- 1 root root 3046 Jan 16 01:09 httd.cert
-rw-r--r-- 1 root root  651 Jan 16 00:52 httpd.csr
-rw-r--r-- 1 root root  887 Jan 16 00:51 httpd.key

编译apache,加入ssl配置

[root@Alicia httpd-2.4.3]# ./configure --prefix=/usr/local/apache2 
--enable-so --enable-ssl --enable-rewrite --with-apr=/usr/local/apr
 --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/
[root@Alicia apache2]# vi /usr/local/apache2/conf/httpd.conf
 88 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
127 LoadModule ssl_module modules/mod_ssl.so
480 # Secure (SSL/TLS) connections
481 Include conf/extra/httpd-ssl.conf
[root@Alicia apache2]# vi conf/extra/httpd-ssl.conf 
106 SSLCertificateFile "/usr/local/apache2/certs/httpd.crt"
116 SSLCertificateKeyFile "/usr/local/apache2/certs/httpd.key"
[root@Alicia apache2]# /usr/local/apache2/bin/apachectl restart

至此 https://www.alicia.net成功获取证书,访问网页

出现的问题:


httpd源码编译时需要apr, apr-util, pcre的依赖关系,否则编译不过



编译libxml2失败,是因为装了两个版本的zlib,解决方法:
./configure --prefix=/usr/local/libxml2/ --without-zlib



php make不过需要修改gd_io.h
make: *** [ext/gd/gd.lo] Error 1
[root@centos php-5.4.11]# vi /usr/local/gd2/include/gd_io.h 
  1 #ifdef __cplusplus
  2 extern "C" {
  3 #endif
  4 
  5 #ifndef GD_IO_H
  6 #define GD_IO_H 1
  7 
  8 #include <stdio.h>
  9 
 10 #ifdef VMS
 11 #define Putchar gdPutchar
 12 #endif
 13 
 14 typedef struct gdIOCtx
 15 {
 16   int (*getC) (struct gdIOCtx *);
 17   int (*getBuf) (struct gdIOCtx *, void *, int);
 18 
 19   void (*putC) (struct gdIOCtx *, int);
 20   int (*putBuf) (struct gdIOCtx *, const void *, int);
 21 
 22   /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike f
    seek! */
 23   int (*seek) (struct gdIOCtx *, const int);
 24 
 25   long (*tell) (struct gdIOCtx *);
 26 
 27   void (*gd_free) (struct gdIOCtx *);
 28 
 29   void (*data);
 30 }



php make 不过需要修改gd_compat.c
make: *** [ext/gd/libgd/gd_compat.lo] Error 1
[root@centos php-5.4.11]# vi ext/gd/libgd/gd_compat.c
  1 #include "php_config.h"
  2 #ifdef HAVE_GD_PNG
  3 /* needs to be first */
  4 # include </usr/local/libpng/include/png.h>
  5 #endif
  6 
  7 #ifdef HAVE_GD_JPG
  8 #include <stdio.h>
  9 # include <jpeglib.h>
 10 #endif
 11 
 12 #ifdef HAVE_GD_JPG















展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部