首页  »   MySQL

nginx,mysql,php环境筹建

网友分享于:2013-09-11  浏览:19次
nginx,mysql,php环境搭建
1、安装Linux Nginx
# tar -zxvf nginx-0.8.5.tar.gz 
# cd nginx-0.8.5 
# ./configure --prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-http_ssl_module(安装路径及
所需依赖包)--prefix(安装路径)
# make && make install
启动nginx# /usr/local/nginx/sbin/nginx
停止nginx# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
重启nginxkill -HUP `cat /usr/local/nginx/logs/nginx.pid`
添加到自启动# echo "/usr/local/nginx/sbin/nginx">>/etc/rc.local
或者用 /usr/local/nginx/sbin/nginx 启动 nginx
/usr/local/nginx/sbin/nginx -s quit 退出nginx
/usr/local/nginx/sbin/nginx -s reload 重新载入
还需要安装 apt-get install spawn-fcgi
每次运行的时候执行:告诉php需要相应的端口号 跟之前做的java一样
spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f
/usr/bin/php-cgi(必须滴)
2、spawn-fcgi,用来启动PHP的FastCGI模式
(linux下载包用 wget方式 或者可以直接安装用apt-get install spawn-fcgi方式)
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
tar -zxf spawn-fcgi-1.6.3.tar.gz
cd spawn-fcgi-1.6.3
./configure –bindir=/usr/bin –libdir=/usr/lib –prefix=/etc
make&&make install
3、安装mysql
# tar -zxvf mysql-5.0.67.tar.gz 
# cd mysql-5.0.67 
# groupadd mysql 
# useradd -g mysql -s /sbin/nologin -M mysql 
# ./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charset=all --enable-hread-safe-client
--enable-local-infile --with-low-memory 
# make && make install 
# cp support-files/my-medium.cnf     /etc/my.cnf 
# chown -R mysql.mysql /usr/local/mysql/ 
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R root.root /usr/local/mysql/ 
# chown -R mysql.mysql /usr/local/mysql/var/
启动数据库服务,并添加到自启动
# /usr/local/mysql/bin/mysqld_safe --user=mysql & 
#cp     support-files/mysql.server     /etc/rc.d/init.d/mysqld 
#chmod     755     /etc/rc.d/init.d/mysqld
加入自动启动服务队列:
#chkconfig --add mysqld 
#chkconfig     --level     345     mysqld     on添加root密码 
# /usr/local/mysql/bin/mysqladmin -u root password "123456" 
测试一下:# /usr/local/mysql/bin/mysql -u root -p输入密码:123456,看能不能进入到数据库
配置库文件搜索路径
# echo "/usr/local/mysql/lib/mysql">>/etc/ld.so.conf 
# ldconfig 
# ldconfig -v 
添加/usr/local/mysql/bin到环境变量PATH中 
#echo "export PATH=$PATH:/usr/local/mysql/bin">>/etc/profile 
#source /etc/profile
4、安装PHP
这里产生的是可执行文件,和apache的不一样,和apache结合的时候产生的是动态库
# tar -jxvf php-5.2.6.tar.bz2 
# gzip -cd php-5.2.6-fpm-0.5.9.diff.gz |patch -d php-5.2.6 -p1 
# cd php-5.2.6 
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --enable-fastcgi --enable-fpm  
--with-config-file-path=/usr/local/php/etc --enable-force-cgi-redirect 
# make && make install 
# cp php.ini-recommended /usr/local/php/etc/php.ini 
# vi /usr/local/php/php-fpm.conf
(1)<value name="listen_address">127.0.0.1:9000</value>修改为<value name="listen_address">IP:9000</value> 
//本机就用默认的127.0.0.1 
(2)下面这两行去掉注释并修改                           
<value name="sendmail_path">/usr/sbin/sendmail -t -i</value>
<value name="display_errors">1</value>
(3)<value name="user">nobody</value>      //去注释 
(4)<value name="group">nobody</value>     //去注释 
(5)<value name="allowed_clients">127.0.0.1</value>      //允许连接的PC,本机就用127.0.0.1
启动php-fpm# /usr/local/php/sbin/php-fpm start添加到自启动# echo "/usr/local/php/sbin/php-fpm start">>/etc/rc.local
5、修改Linux Nginx的配置文件,支持PHP
# vim /usr/local/nginx/conf/nginx.conf 
user     nobody; 
worker_processes     8; 
pid     /usr/local/nginx/logs/nginx.pid; 
worker_rlimit_nofile 1024; 
events 
{use epoll; 
worker_connections 1024;} 
http{ 
include          mime.types; 
default_type     application/octet-stream; 
server_names_hash_bucket_size 128; 
client_header_buffer_size 32k; 
large_client_header_buffers 4 32k; 
client_max_body_size 8m;
sendfile on; 
tcp_nopush        on; 
keepalive_timeout 60; 
tcp_nodelay on; 
fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_buffer_size 64k; 
fastcgi_buffers 4 64k; 
fastcgi_busy_buffers_size 128k; 
fastcgi_temp_file_write_size 128k; 
gzip on; 
gzip_min_length     1k; 
gzip_buffers        4 16k; 
gzip_http_version 1.0; 
gzip_comp_level 2; 
gzip_types          text/plain application/x-javascript text/css application/xml; 
gzip_vary on; 

server { 
listen          80; 
server_name     www.bbb.com; 
root      /www/uuweb; 
index     index.html index.htm index.php; 
location ~ .*\.(php|php5)?$ {  或者  location / {
不知道怎么回事我用前一个css不起作用,只能用后面一个。
root              /www/uuweb; 
fastcgi_pass      127.0.0.1:9000;        
fastcgi_index     index.php; 
fastcgi_param     SCRIPT_FILENAME     /www/uuweb$fastcgi_script_name; 
include           fastcgi_params;} 
#location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
#{expires         30d;} 
#location ~ .*\.(js|css)?$ 
#{expires         1h;}       
log_format     access     '$remote_addr - $remote_user [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer" ' 
'"$http_user_agent" $http_x_forwarded_for'; 
access_log     /var/logs/access.log     access;}}
注:server部分为PHP虚拟主机127.0.0.1:9000为fastcgi的PC,我这里用的本机/www/uuweb$fastcgi_script_name; 为PHP网页保存的目录测试配置文件:
# /usr/local/nginx/sbin/nginx -t


----------------------------

编译pcre库以及nginx

cd /data/download
tar zxvf pcre-8.00.tar.gz -C /usr/local/src/
cd /usr/local/src/pcre-8.00/
./configure
make && make install

cd /data/download
tar zxvf nginx-0.7.64.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-0.7.64/
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

建立nginx的log文件夹

mkdir -p /data/logs
chmod +w /data/logs
chown -R nginx:nginx /data/logs
创建nginx的配置文件

rm -f /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
配置文件内容:

user  nginx nginx;

worker_processes 1;

error_log  /data/logs/nginx_error.log  crit;

pid        /usr/local/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
  use epoll;
  worker_connections 51200;
}

http
{
  include       mime.types;
  default_type  application/octet-stream;

  #charset  utf-8;

  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;

  sendfile on;
  tcp_nopush     on;

  keepalive_timeout 60;

  tcp_nodelay on;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  server
  {
    listen       80;
    server_name  www.web.cn *.web.cn;
    index index.php;
    root  /data/htdocs/webroot;
    autoindex on;

    if (!-f $request_filename){
      rewrite ^/(.+)$ /index.php?$1& last;
    }

    location ~* ^.+\.(jpg|jpeg|gif|ico)$  {
      access_log off;
      gzip off;
      expires 30d;
    }

    location ~* ^.+\.(css|js)$ {
      access_log off;
      expires 1d;
    }

    location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ {
      gzip off;
    }

    location ~ .*\.(php)?$
    {
      fastcgi_pass  unix:/tmp/php-cgi.sock;
      #fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
    }

    log_format  minhlog  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
    access_log  /data/logs/webroot_access.log;
  }
}
上面是假设域名为web.cn,目录就是前面安装php时建立的目录。在能看懂配置内容的时候可以自己修改里面具体的写法,并不复杂的,只有几句而已。

配置fcgi.conf文件:

vi /usr/local/nginx/conf/fcgi.conf
文件内容:

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;
配置完成,启动服务:

ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
添加nginx,mysql,php的启动项到启动文件:

vi /etc/rc.local
/data/mysql/3306/mysql start
/usr/local/php/sbin/php-fpm start
/usr/local/nginx/sbin/nginx
这样就能开机自动启动各个服务了。

平滑重启nginx的命令是:

kill -HUP `cat /usr/local/nginx/nginx.pid`
至此web服务已经可以正常运行。对于日志切割的部分,有需要的可以自己参考张宴大牛的博客,一般小站日志也没什么好看的,我自己是直接关闭了的, 当然如果被攻击的话可以再临时打开,具体自己掌握了。也可以自己找一些nginx配置和优化的资料来看,相对来说一点也不复杂,只是要花些时间。

五、后续工作

后续的修改和设置需要看自己的个性化需要,不能一概而论了,这里只给出一点思路。大体分为两块,一是系统的安全与优化,二是网站功能的扩展。第一方 面,包括修改root密码或登录方式、更改ssh端口、配置防ping,清理系统不需要的服务、用户组、用户、精确限制用户的权限等。以及对nginx、 mysql等的安全设置。第二方面,如果需要安装ftp,可以考虑使用centos自带的vsftpd,安装其他扩展时尽量自己编译为好。

使用中注意整理常用的参数,记好各个程序的安装路径、配置文件路径、各类log文件的路径等,常用的系统命令不用说自然要熟记了。尤其强调一定要注意备份,不仅包括网站数据,也包括各类配置文件。

http://guitarsdw2.blog.163.com/blog/static/101437600201021345136141/

===========================================
在配置nginx提示如下错误时:
[emerg]: getpwnam(“www”) failed 
解决方案:
在nginx.conf中 把user www www改为user nobody nobody既可

这里的www是 nginx.conf 中配置的.
user               www; (原来)
user               nobody nobody;

======================================
ginx启动报错,信息如下:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
.....

使用ps ef|grep nginx,并未发现有nginx进程,有可能被其他进程占用,这时可以采用如下方式处理:

1. 查看80端口占用
   netstat -ntpl

2. 杀掉占用80端口的进程

kill -9 $pid

发现httpd 仍然占用
ps -aux | grep httpd
再把找到的请求kill掉.

相关解决方案

最新解决方案