最新消息:

Nginx+PHP(FastCGI)+MySQL在小内存VPS(t1.micro)上的安装配置与优化

mysql admin 4浏览

参考资料:
http://blog.s135.com/nginx_php_v6/
http://blog.s135.com/post/375/

背景介绍:
以前,因为AWS EC2的价格比较昂贵而租用了其它国外小厂商的VPS,在使用了3年多之后,发现AWS EC2的价格居然比现在正在使用的VPS要便宜很多。
全球线路与速度最理想的日本节点的t1.micro型号,选择3年长期合约的价格在2500元人民币左右,一年下来也不到900元,所以就打算将Blog迁移到AWS EC2上。
之前在部署VPS环境的时候,基本上是完整的参考了张宴的两篇文档,包括操作系统的选择也是相同的。

但这一次我想采用目前较新的CentOS 6.4 minimal x86_64
同时选择版本最新的Nginx,PHP以及MySQL,引入EPEL仓库来简化安装与部署过程中对额外的依赖软件的安装,优化一些原来的工作方式,比如创建服务管理脚本来启动/停止Nginx与MySQL,使用logrotate来切割日志等;
经过了一番折腾,在填了不少的坑之后,终于成功的完成了新环境的部署,感觉非常不错。

下面,就是此次的整个安装配置过程:
1. 安装常用工具
yum install -y vim wget unzip screen tree mlocate

2. 安装编译工具
yum install -y gcc gcc-c++ autoconf patch cmake automake

3. 安装EPEL仓库
yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

4. 安装所有必需的软件包
yum install -y libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel
yum install -y libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gmp gmp-devel
yum install -y bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel unixODBC unixODBC-devel
yum install -y krb5-libs krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel
yum install -y libgcrypt libgcrypt-devel libtool
yum install -y libmcrypt libmcrypt-devel mhash mhash-devel mcrypt pcre pcre-devel
yum install -y ImageMagick ImageMagick-devel

5. 下载所有必需的软件源码包
mkdir /root/packages
cd /root/packages
wget http://nginx.org/download/nginx-1.4.7.tar.gz
wget http://museum.php.net/php5/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.36.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://pecl.php.net/get/imagick-3.2.0RC1.tgz
wget http://pkgs.fedoraproject.org/repo/pkgs/php-eaccelerator/eaccelerator-0.9.6.1.tar.bz2/32ccd838e06ef5613c2610c1c65ed228/eaccelerator-0.9.6.1.tar.bz2

6. 编译安装iconv
cd /root/packages
tar xzvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make
make install

7. 编译安装并配置MySQL
7.1 编译安装MySQL
cd /root/packages
tar xzvf mysql-5.5.36.tar.gz
cd mysql-5.5.36
cmake -DCMAKE_INSTALL_PREFIX=/webserver/mysql
-DSYSCONFDIR=/webserver/mysql/etc
-DMYSQL_DATADIR=/webserver/mysql/data
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/werbserver/mysql/run/mysqld.sock
-DMYSQL_USER=mysql
-DEXTRA_CHARSETS=all
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_EMBEDDED_SERVER=1
-DENABLED_LOCAL_INFILE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
make
make install

7.2 创建mysql用户
useradd mysql -d /webserver/mysql/data

7.3 创建MySQL所需目录
mkdir -p /webserver/mysql/{etc,data,tmp,run,binlogs,log}
chown mysql:mysql -R /webserver/mysql/{etc,data,tmp,run,binlogs,log}

7.4 创建my.cnf配置文件
vim /webserver/mysql/etc/my.cnf

01 [mysqld]
02 # basic settings
03 datadir = /webserver/mysql/data
04 tmpdir = /webserver/mysql/tmp
05 socket = /webserver/mysql/run/mysqld.sock
06 port = 3306
07 pid-``file = /webserver/mysql/run/mysqld.pid
08
09 # innodb settings
10 default-storage-engine = INNODB
11 innodb_file_per_table = 1
12 log-bin = /webserver/mysql/binlogs/bin-log-mysqld
13 log-bin-index = /webserver/mysql/binlogs/bin-log-mysqld.index
14 innodb_data_home_dir = /webserver/mysql/data
15 innodb_data_file_path = ibdata1:10M:autoextend
16 innodb_log_group_home_dir = /webserver/mysql/data
17
18 # increase the max connections
19 max_connections = 200
20
21 # the expiration time for logs, including binlogs
22 expire_logs_days = 7
23
24 # set the character as utf8
25 character-``set``-server = utf8
26 collation-server = utf8_unicode_ci
27
28 # server id
29 server-``id``=33061
30
31 # other settings
32 [mysqld_safe]
33 log-error = /webserver/mysql/log/mysqld.log
34 pid-``file = /webserver/mysql/run/mysqld.pid
35 open``-files-limit = 8192
36
37 [mysqlhotcopy]
38 interactive-timeout
39
40 [client]
41 port = 3306
42 socket = /webserver/mysql/run/mysqld.sock
43 default-character-``set = utf8

chown mysql:mysql /webserver/mysql/etc/my.cnf

7.5 初始化MySQL系统数据库
chmod +x scripts/mysql_install_db
scripts/mysql_install_db –user=mysql –basedir=/webserver/mysql –datadir=/webserver/mysql/data/ –defaults-file=/webserver/mysql/etc/my.cnf

7.6 创建MySQL服务管理脚本
mkdir /webserver/init.d/
cp support-files/mysql.server /webserver/init.d/mysqld
chmod +x /webserver/init.d/mysqld

7.7 启动MySQL服务
/webserver/init.d/mysqld start

7.8 登陆MySQL命令行终端
/webserver/mysql/bin/mysql -uroot -p

8. 编译安装并配置PHP
8.1 编译安装PHP
cd /root/packages
tar xzf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1

注:创建软链接以便PHP在编译时能顺利找到所需的库文件
ln -s /webserver/mysql/lib /webserver/mysql/lib64
ln -s /usr/local/lib/libiconv.so /usr/local/lib64/libiconv.so
ln -s /usr/lib64/libmhash.so.2 /usr/lib64/libmhash.so

cd php-5.2.17
./configure –prefix=/webserver/php
–with-config-file-path=/webserver/php/etc
–with-mysql=/webserver/mysql –with-mysqli=/webserver/mysql/bin/mysql_config
–with-libdir=lib64
–with-iconv-dir=/usr/local
–with-freetype-dir –with-jpeg-dir –with-png-dir
–with-zlib –with-libxml-dir –enable-xml
–disable-rpath –enable-discard-path
–enable-safe-mode –enable-bcmath –enable-shmop
–enable-sysvsem –enable-inline-optimization
–with-curl –with-curlwrappers –enable-mbregex
–enable-fastcgi –enable-fpm –enable-force-cgi-redirect
–enable-mbstring –with-mcrypt –with-gd –enable-gd-native-ttf
–with-openssl –with-mhash –enable-pcntl –enable-sockets
–with-ldap –with-ldap-sasl –with-xmlrpc
–enable-zip –enable-soap

make ZEND_EXTRA_LIBS=’-liconv’

注:创建软链接以便PHP在安装时能顺利找到所需的库文件
ln -s /webserver/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/libiconv.so.2

make install
cp php.ini-dist /webserver/php/etc/php.ini

8.2 编译安装eaccelerator
cd /root/packages
tar xjf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1/
/webserver/php/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/webserver/php/bin/php-config
make
make install
cd ../

8.3 编译安装PDO_MYSQL
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/webserver/php/bin/phpize
./configure –with-php-config=/webserver/php/bin/php-config –with-pdo-mysql=/webserver/mysql
make
make install
cd ../

8.4 编译安装imagick
tar xzf imagick-3.2.0RC1.tgz
cd imagick-3.2.0RC1
/webserver/php/bin/phpize
./configure –with-php-config=/webserver/php/bin/php-config
make
make install

8.5 修改php.ini配置文件
vim /webserver/php/etc/php.ini

01 ; Directory``in which the loadable extensions (modules) reside.
02 ;extension_dir =``"./"
03 extension_dir =``"/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
04 extension =``"imagick.so"
05 extension =``"pdo_mysql.so"
06
07 ;output_buffering = Off
08 output_buffering = On
09
10 ; cgi.fix_pathinfo=0
11 cgi.fix_pathinfo=0

8.6 创建缓存目录
mkdir /webserver/eaccelerator_cache

8.7 在php.ini中添加eaccelerator支持
vim /webserver/php/etc/php.ini

01 [eaccelerator]
02 zend_extension=``"/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
03 eaccelerator.shm_size=``"1"
04 eaccelerator.cache_dir=``"/webserver/eaccelerator_cache"
05 eaccelerator.``enable``=``"1"
06 eaccelerator.optimizer=``"1"
07 eaccelerator.check_mtime=``"1"
08 eaccelerator.debug=``"0"
09 eaccelerator.filter=``""
10 eaccelerator.shm_max=``"0"
11 eaccelerator.shm_ttl=``"3600"
12 eaccelerator.shm_prune_period=``"3600"
13 eaccelerator.shm_only=``"0"
14 eaccelerator.compress=``"1"
15 eaccelerator.compress_level=``"9"
16 eaccelerator.keys =``"disk_only"
17 eaccelerator.sessions =``"disk_only"
18 eaccelerator.content =``"disk_only"

8.8 创建www用户
useradd -r www

8.9 创建所需目录
mkdir -p /webserver/blog/{rainbow,eric,keshui,logs}
chown www:www /webserver/blog/{rainbow,eric,keshui,logs}
chmod +w /webserver/blog/{rainbow,eric,keshui,logs}
mkdir /webserver/php/run

8.10 创建php-fpm.con配置文件
rm -f /webserver/php/etc/php-fpm.conf
vim /webserver/php/etc/php-fpm.conf

001 <?``xml version``=``"1.0" ?>
002 <``configuration``>
003
004 All relative paths in this config are relative to php's install prefix
005
006 <``section name``=``"global_options"``>
007
008 Pid file
009 <``value name``=``"pid_file"``>/webserver/php/logs/php-fpm.pid</``value``>
010
011 Error log file
012 <``value name``=``"error_log"``>/webserver/php/logs/php-fpm.log</``value``>
013
014 Log level
015 <``value name``=``"log_level"``>notice</``value``>
016
017 When this amount of php processes exited with SIGSEGV or SIGBUS ...
018 <``value name``=``"emergency_restart_threshold"``>10</``value``>
019
020 ... in a less than this interval of time, a graceful restart will be initiated.
021 Useful to work around accidental curruptions in accelerator's shared memory.
022 <``value name``=``"emergency_restart_interval"``>1m</``value``>
023
024 Time limit on waiting child's reaction on signals from master
025 <``value name``=``"process_control_timeout"``>5s</``value``>
026
027 Set to 'no' to debug fpm
028 <``value name``=``"daemonize"``>yes</``value``>
029
030 </``section``>
031
032 <``workers``>
033
034 <``section name``=``"pool"``>
035
036 Name of pool. Used in logs and stats.
037 <``value name``=``"name"``>default</``value``>
038
039 Address to accept fastcgi requests on.
040 Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'
041 <``value name``=``"listen_address"``>/webserver/php/run/php-cgi.sock</``value``>
042
043 <``value name``=``"listen_options"``>
044
045 Set listen(2) backlog
046 <``value name``=``"backlog"``>-1</``value``>
047
048 Set permissions for unix socket, if one used.
049 In Linux read/write permissions must be set in order to allow connections from web server.
050 Many BSD-derrived systems allow connections regardless of permissions.
051 <``value name``=``"owner"``></``value``>
052 <``value name``=``"group"``></``value``>
053 <``value name``=``"mode"``>0666</``value``>
054 </``value``>
055
056 Additional php.ini defines, specific to this pool of workers.
057 <``value name``=``"php_defines"``>
058 <``value name``=``"sendmail_path"``>/usr/sbin/sendmail -t -i</``value``>
059 <``value name``=``"display_errors"``>0</``value``>
060 </``value``>
061
062 Unix user of processes
063 <``value name``=``"user"``>www</``value``>
064
065 Unix group of processes
066 <``value name``=``"group"``>www</``value``>
067
068 Process manager settings
069 <``value name``=``"pm"``>
070
071 Sets style of controling worker process count.
072 Valid values are 'static' and 'apache-like'
073 <``value name``=``"style"``>static</``value``>
074
075 Sets the limit on the number of simultaneous requests that will be served.
076 Equivalent to Apache MaxClients directive.
077 Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi
078 Used with any pm_style.
079 <``value name``=``"max_children"``>5</``value``>
080
081 Settings group for 'apache-like' pm style
082 <``value name``=``"apache_like"``>
083
084 Sets the number of server processes created on startup.
085 Used only when 'apache-like' pm_style is selected
086 <``value name``=``"StartServers"``>20</``value``>
087
088 Sets the desired minimum number of idle server processes.
089 Used only when 'apache-like' pm_style is selected
090 <``value name``=``"MinSpareServers"``>5</``value``>
091
092 Sets the desired maximum number of idle server processes.
093 Used only when 'apache-like' pm_style is selected
094 <``value name``=``"MaxSpareServers"``>35</``value``>
095
096 </``value``>
097
098 </``value``>
099
100 The timeout (in seconds) for serving a single request after which the worker process will be terminated
101 Should be used when 'max_execution_time' ini option does not stop script execution for some reason
102 '0s' means 'off'
103 <``value name``=``"request_terminate_timeout"``>0s</``value``>
104
105 The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
106 '0s' means 'off'
107 <``value name``=``"request_slowlog_timeout"``>0s</``value``>
108
109 The log file for slow requests
110 <``value name``=``"slowlog"``>logs/slow.log</``value``>
111
112 Set open file desc rlimit
113 <``value name``=``"rlimit_files"``>65535</``value``>
114
115 Set max core size rlimit
116 <``value name``=``"rlimit_core"``>0</``value``>
117
118 Chroot to this directory at the start, absolute path
119 <``value name``=``"chroot"``></``value``>
120
121 Chdir to this directory at the start, absolute path
122 <``value name``=``"chdir"``></``value``>
123
124 Redirect workers' stdout and stderr into main error log.
125 If not set, they will be redirected to /dev/null, according to FastCGI specs
126 <``value name``=``"catch_workers_output"``>yes</``value``>
127
128 How much requests each process should execute before respawn.
129 Useful to work around memory leaks in 3rd party libraries.
130 For endless request processing please specify 0
131 Equivalent to PHP_FCGI_MAX_REQUESTS
132 <``value name``=``"max_requests"``>1024</``value``>
133
134 Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.
135 Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)
136 Makes sense only with AF_INET listening socket.
137 <``value name``=``"allowed_clients"``>127.0.0.1</``value``>
138
139 Pass environment variables like LD_LIBRARY_PATH
140 All $VARIABLEs are taken from current environment
141 <``value name``=``"environment"``>
142 <``value name``=``"HOSTNAME"``>$HOSTNAME</``value``>
143 <``value name``=``"PATH"``>/usr/local/bin:/usr/bin:/bin</``value``>
144 <``value name``=``"TMP"``>/tmp</``value``>
145 <``value name``=``"TMPDIR"``>/tmp</``value``>
146 <``value name``=``"TEMP"``>/tmp</``value``>
147 <``value name``=``"OSTYPE"``>$OSTYPE</``value``>
148 <``value name``=``"MACHTYPE"``>$MACHTYPE</``value``>
149 <``value name``=``"MALLOC_CHECK_"``>2</``value``>
150 </``value``>
151
152 </``section``>
153
154 </``workers``>
155
156 </``configuration``>

8.11 创建php-fpm服务管理脚本
ln -s /webserver/php/sbin/php-fpm /webserver/init.d/php-fpm

8.12 启动php-fpm服务
/webserver/init.d/php-fpm start

9. 编译安装并配置Nginx
9.1 编译安装Nginx
cd /root/packages
tar xzf nginx-1.4.7.tar.gz
cd nginx-1.4.7/
./configure –user=www –group=www
–prefix=/usr/local/webserver/nginx
–with-http_stub_status_module –with-http_ssl_module
make
make install

9.2 创建Nginx所需目录
mkdir /webserver/nginx/conf/conf.d
mkdir /webserver/nginx/run

9.3 创建fastcgi_params配置文件
vim fastcgi_params

01 fastcgi_param QUERY_STRING $query_string;
02 fastcgi_param REQUEST_METHOD $request_method;
03 fastcgi_param CONTENT_TYPE $content_type;
04 fastcgi_param CONTENT_LENGTH $content_length;
05
06 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
07 fastcgi_param REQUEST_URI $request_uri;
08 fastcgi_param DOCUMENT_URI $document_uri;
09 fastcgi_param DOCUMENT_ROOT $document_root;
10 fastcgi_param SERVER_PROTOCOL $server_protocol;
11
12 fastcgi_param GATEWAY_INTERFACE CGI/1.1;
13 fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
14
15 fastcgi_param REMOTE_ADDR $remote_addr;
16 fastcgi_param REMOTE_PORT $remote_port;
17 fastcgi_param SERVER_ADDR $server_addr;
18 fastcgi_param SERVER_PORT $server_port;
19 fastcgi_param SERVER_NAME $server_name;
20
21 # PHP only, required if PHP was built with --enable-force-cgi-redirect
22 fastcgi_param REDIRECT_STATUS 200;

9.4 创建Nginx.conf主配置文件
vim /webserver/nginx/conf/nginx.conf

01 user www www;
02 worker_processes 1;
03
04 error_log /webserver/nginx/logs/error.log;
05 pid /webserver/nginx/run/nginx.pid;
06
07 worker_rlimit_nofile 32768;
08
09 events {
10 use epoll;
11 worker_connections 32768;
12 }
13
14
15 http {
16 include /webserver/nginx/conf/mime.types;
17 default_type application/octet-stream;
18
19 log_format main``'$remote_addr - $remote_user [$time_local] "$request" '
20 '$status $body_bytes_sent "$http_referer" '
21 '"$http_user_agent" "$http_x_forwarded_for"'``;
22
23 access_log /webserver/nginx/logs/access.log main;
24
25 server_names_hash_bucket_size 128;
26 client_header_buffer_size 32k;
27 large_client_header_buffers 4 32k;
28
29 sendfile on;
30 tcp_nopush on;
31
32 keepalive_timeout 60;
33
34 tcp_nodelay on;
35
36 fastcgi_connect_timeout 300;
37 fastcgi_send_timeout 300;
38 fastcgi_read_timeout 300;
39 fastcgi_buffer_size 64k;
40 fastcgi_buffers 4 64k;
41 fastcgi_busy_buffers_size 128k;
42 fastcgi_temp_file_write_size 128k;
43
44 gzip on;
45 gzip_min_length 1k;
46 gzip_buffers 4 16k;
47 gzip_http_version 1.0;
48 gzip_comp_level 2;
49 gzip_types text/plain application/x-javascript text/css application/xml;
50 gzip_vary on;
51
52 include /webserver/nginx/conf/conf.d/*.conf;
53 }

9.5 创建附属配置文件
9.5.1 创建status.conf配置文件管理status页面
vim /webserver/nginx/conf/conf.d/status.conf

1 server
2 {
3 listen 80;
4 server_name status.nginxs.com status.heylinux.com;
5 location / {
6 stub_status on;
7 access_log off;
8 }
9 }

9.5.2 创建rainbow.conf配置文件管理heylinux.com
vim /webserver/nginx/conf/conf.d/rainbow.conf

01 server
02 {
03 listen 80;
04 server_name heylinux.com *.heylinux.com;
05 index index.html index.htm index.php;
06 root /webserver/blog/rainbow;
07
08 location / {
09 if (-f $request_filename/index.html){
10 rewrite (.*) $1/index.html``break``;
11 }
12 if (-f $request_filename/index.php){
13 rewrite (.*) $1/index.php;
14 }
15 if (!-f $request_filename){
16 rewrite (.*) /index.php;
17 }
18 }
19
20 location ~ .*.(php\|php5)?$
21 {
22 fastcgi_pass unix:/webserver/php/run/php-cgi.sock;
23 fastcgi_index index.php;
24 fastcgi_param SCRIPT_FILENAME /webserver/blog/rainbow$fastcgi_script_name;
25 include /webserver/nginx/conf/fastcgi_params;
26 }
27
28 location ~ .*.(gif\|jpg\|jpeg\|png\|bmp\|swf)$
29 {
30 expires 15d;
31 }
32
33 location ~ .*.(js\|css)?$
34 {
35 expires 1d;
36 }
37
38 log_format rainbow_access``'$remote_addr - $remote_user [$time_local] "$request" '
39 '$status $body_bytes_sent "$http_referer" '
40 '"$http_user_agent" $http_x_forwarded_for'``;
41 access_log /webserver/blog/logs/rainbow_access.log rainbow_access;
42 }

9.5.3 创建eric.conf配置文件管理nginxs.com
vim /webserver/nginx/conf/conf.d/eric.conf

01 server
02 {
03 listen 80;
04 server_name nginxs.com *.nginxs.com;
05 index index.html index.htm index.php;
06 root /webserver/blog/eric;
07
08 location / {
09 if (-f $request_filename/index.html){
10 rewrite (.*) $1/index.html``break``;
11 }
12 if (-f $request_filename/index.php){
13 rewrite (.*) $1/index.php;
14 }
15 if (!-f $request_filename){
16 rewrite (.*) /index.php;
17 }
18 }
19
20 location ~ .*.(php\|php5)?$
21 {
22 fastcgi_pass unix:/webserver/php/run/php-cgi.sock;
23 fastcgi_index index.php;
24 fastcgi_param SCRIPT_FILENAME /webserver/blog/eric$fastcgi_script_name;
25 include /webserver/nginx/conf/fastcgi_params;
26 }
27
28 location ~ .*.(gif\|jpg\|jpeg\|png\|bmp\|swf)$
29 {
30 expires 15d;
31 }
32
33 location ~ .*.(js\|css)?$
34 {
35 expires 1d;
36 }
37
38 log_format eric_access``'$remote_addr - $remote_user [$time_local] "$request" '
39 '$status $body_bytes_sent "$http_referer" '
40 '"$http_user_agent" $http_x_forwarded_for'``;
41 access_log /webserver/blog/logs/eric_access.log eric_access;
42 }

9.6 创建Nginx服务管理脚本
touch /webserver/init.d/nginx
chmod +x /webserver/init.d/nginx
vim /webserver/init.d/nginx

001 #!/bin/sh
002 #
003 # nginx - this script starts and stops the nginx daemon
004 #
005 # chkconfig: - 85 15
006 # description: Nginx is an HTTP(S) server, HTTP(S) reverse
007 # proxy and IMAP/POP3 proxy server
008 # processname: nginx
009 # config: /etc/nginx/nginx.conf
010 # config: /etc/sysconfig/nginx
011 # pidfile: /var/run/nginx.pid
012
013 # Source function library.
014 . /etc/rc.d/init.d/functions
015
016 # Source networking configuration.
017 . /etc/sysconfig/network
018
019 # Check that networking is up.
020 [``"$NETWORKING" =``"no" ] &&``exit 0
021
022 nginx=``"/webserver/nginx/sbin/nginx"
023 prog=$(``basename $nginx)
024
025 NGINX_CONF_FILE=``"/webserver/nginx/conf/nginx.conf"
026
027 lockfile=/var/lock/subsys/nginx
028
029 make_dirs() {
030 # make required directories
031 user=`$nginx -V 2>&1 \|```grep` `"configure arguments:"` `\|sed‘s/[^]–user=([^ ])./1/g’` “-“`
032 if [ -z```"grep $user /etc/passwd"``];`then
033 useradd -M -s /bin/nologin $user
034 fi
035 `options=$nginx -V 2>&1 |``grep `’configure arguments:’“““
036 for opt``in $options;``do
037 if [ ````echo` `$opt \|grep‘.*-temp-path’` ];then`
038 value=````echo` `$opt \|cut-d"="`-f 2“`
039 if [ ! -d``"$value" ];``then
040 # echo "creating" $value
041 mkdir -p $value &&``chown -R $user $value
042 fi
043 fi
044 done
045 }
046
047 start() {
048 [ -x $nginx ] \|\|``exit 5
049 [ -f $NGINX_CONF_FILE ] \|\|``exit 6
050 make_dirs
051 echo -n $``"Starting $prog: "
052 daemon $nginx -c $NGINX_CONF_FILE
053 retval=$?
054 echo
055 [ $retval -``eq 0 ] &&``touch $lockfile
056 return $retval
057 }
058
059 stop() {
060 echo -n $``"Stopping $prog: "
061 killproc $prog -QUIT
062 retval=$?
063 echo
064 [ $retval -``eq 0 ] &&``rm -f $lockfile
065 return $retval
066 }
067
068 restart() {
069 configtest \|\|``return $?
070 stop
071 sleep 1
072 start
073 }
074
075 reload() {
076 configtest \|\|``return $?
077 echo -n $``"Reloading $prog: "
078 killproc $nginx -HUP
079 RETVAL=$?
080 echo
081 }
082
083 force_reload() {
084 restart
085 }
086
087 configtest() {
088 $nginx -t -c $NGINX_CONF_FILE
089 }
090
091 rh_status() {
092 status $prog
093 }
094
095 rh_status_q() {
096 rh_status >/dev/null 2>&1
097 }
098
099 case "$1" in
100 start)
101 rh_status_q &&``exit 0
102 $1
103 ;;
104 stop)
105 rh_status_q \|\|``exit 0
106 $1
107 ;;
108 restart\|configtest)
109 $1
110 ;;
111 reload)
112 rh_status_q \|\|``exit 7
113 $1
114 ;;
115 force-reload)
116 force_reload
117 ;;
118 status)
119 rh_status
120 ;;
121 condrestart\|try-restart)
122 rh_status_q \|\|``exit 0
123 ;;
124 *)
125 echo $``"Usage: $0 {start\|stop\|status\|restart\|condrestart\|try-restart\|reload\|force-reload\|configtest}"
126 exit 2
127 esac

9.7 启动Nginx服务
/webserver/init.d/nginx start

10. 优化系统内核参数
vim /etc/sysctl.conf

01 # For Nginx
02 net.ipv4.tcp_max_syn_backlog = 65536
03 net.core.netdev_max_backlog = 32768
04 net.core.somaxconn = 32768
05 net.ipv4.tcp_timestamps = 0
06 net.ipv4.tcp_synack_retries = 2
07 net.ipv4.tcp_syn_retries = 2
08 net.ipv4.tcp_tw_recycle = 1
09 net.ipv4.tcp_tw_reuse = 1
10 net.ipv4.ip_local_port_range = 1024 65535

sysctl -p

vim /etc/security/limits.conf

1 * - nofile 32768
2 * - nproc 32768

11. 创建交换分区
dd if=/dev/zero of=/opt/swapfile bs=1M count=256
mkswap /opt/wapfile
swapon /opt/swapfile

vi /etc/fstab

1 /opt/swapfile swap swap defaults 0 0

12. 配置logrotate切割日志
yum install -y logrotate
vim /etc/logrotate.d/blog

01 /webserver/blog/logs/rainbow_access.log
02 /webserver/blog/logs/eric_access.log
03 {
04 daily
05 rotate 7
06 missingok
07 notifempty
08 dateext
09 sharedscripts
10 postrotate
11 if [ -f /webserver/nginx/run/nginx.pid ];``then
12 /bin/``kill -HUP `/bin/```cat`/webserver/nginx/run/nginx.pid“`
13 fi
14 endscript
15 }

13. 结束

相关文章

转载请注明:爱开源 » Nginx+PHP(FastCGI)+MySQL在小内存VPS(t1.micro)上的安装配置与优化

转载请注明:爱开源 » Nginx+PHP(FastCGI)+MySQL在小内存VPS(t1.micro)上的安装配置与优化