1、前言
首先,得批评下自己。在Mac系统下,捣鼓了一个礼拜左右的服务器配置代理,然后某个时刻恍然大悟(应该是幡然醒悟):除了我这样,貌似没有谁那么傻会用Mac当服务器吧。。。那写Mac下Nginx没什么用了。不过Unix和linux相似点很多,如果只是想要粗浅学习nginx的配置之类的,也可以在MacOS系统进行。但是如果想要了解更多服务器,想要的不仅仅是写写demo之类的粗浅工作的话,或者说以后想要在阿里云啊腾讯云啊之类的买服务器(它总不会给你配个Mac系统吧),虽说命令相似,但是还是建议还是在Linux系统进行吧,早点熟悉熟悉也好~
云服务器: 腾讯云(找考研小伙伴认证了学生账号)
系统:
系统: CentOS 7.2 64位
服务器: Nginx 1.11.12 ([官网](http://nginx.org/en/download.html))
二、Nginx
1、手动下载安装nginx,非yum安装
######0. 这里是我的个性化设置
mkdir /usr/local/downloads ##新建个文件夹,以后用来放下载的东西
ln -s /usr/local/donwloads / ##在root目录下加个快捷方式
cd /downloads ##进入到这个文件夹
######1. 下载nginx安装包
wget http://nginx.org/download/nginx-1.11.11.tar.gz
######2. 解压安装包
tar -zxv -f nginx-1.11.11.tar.gz
######3. 重命名文件夹
mv nginx-1.11.11.tar.gz nginx
######4. 配置configure的初始目录
cd nginx ##先进入到nginx安装包中
./configure --prefix=/usr/local/nginx ##prefix前置目录不能是安装包所在的目录,否则会出错
## 执行命令后,系统开始检查安装所需的依赖文件,会出现不少ERROR,具体见本节Tips
######5. 编译安装nginx
make ##编译
make install ##安装
######6. 检查是否安装成功
cd /usr/local ##在local里面看到了nginx文件夹
cd nginx ##进入到nginx文件夹看到有conf html logs sbin 文件夹
#访问 http://localhost/ 可以看到Welcome to nginx!说明安装成功
######0. 个性化设置
###安装完成,还是习惯性的加了些我的个人设置
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin ##在bin里面添加nginx命令,这样就不需要每次启动都要通过/usr/local/nginx/sbin/nginx来启动
Tips
################ Tip 1################## ####### 当系统检查依赖文件时,会出现一大堆的found和少数not found ####### 这是因为大部分的依赖包,Linux系统中都有,如g++,gcc等 ####### 也有小部分依赖包是需要我们自己去安装的,如PCRE、openssl,zlib等(当然也可以安装,这些主要是扩展modelue所需的) ####### 所以根据系统错误提示,我们去下所需的依赖包 #Error 1: "./configure: error: the HTTP rewrite module requires the PCRE library." #缺少PCRE依赖包,这个包主要用来HTTP rewrite yum search pcre ##找到要下载的pcre-devel yum install pcre-devel #Error 2: "./configure: error: the HTTP gzip module requires the zlib library." #缺少zlib包,主要用来HTTP 打包压缩解压等功能 yum search zlib ##找到要下载的zlib-devel yum install zlib-devel #Error 3: # 可能还有个openssl的错误,不过我没遇到 yum search openssl ##找到要下载的openssl yum install openssl-devel ################ Tip 2################## ##### 有个小技巧,在安装之前可以提前安装完所有的依赖包 ###### yum -y groupinstall "Development tools,Server platform development,Desktop platform development" yum -y install pcre-devel openssl-devel
2、nginx所有文件目录位置
###1、安装包文件所在:/usr/local/downloads/nginx
###新增模块,编译都要通过./configure进行
###2、主要文件夹:
/usr/local/nginx
|
|+conf #配置文件夹
- nginx.conf # nginx的主要配置文件,主要配置
## 动态服务器配置文件
- fastcgi.conf # FastCGI配置文件,主要负责nginx与php数据传递(作用见Tip1)
- fastcgi_params # FastCGI的主要配置文件(和fastcgi.conf区别见Tip2)
- uwsgi_params # 类似FastCGI,用来部署python服务器的配置文件
- scgi_params # scgi 的配置文件,类似FastCGI。
## 文件类型映射表
- mime.types # mime.types是文件类型的设置配置文件。
## 编码转换映射文件,主要是输出内容转码
- win-utf # windows-1251 <--> utf-8
- koi-utf # koi8-r <--> utf-8
- koi-win # koi8-r <--> windows-1251
|+html #网页根目录文件夹
-50x.html #50x错误页面
-index.html #主页
|-logs #日志文件夹
- error.log #错误日志
- access.log #登录日志
- nginx.pid #nginx的pid
|-sbin #命令文件夹
- nginx #启动命令
|+client_body_temp # \
|+proxy_temp # --\ 各类临时
|+scgi_temp # --/ 文件
|+uwsgi_temp # /
3、nginx的基础命令
### 0、查看nginx主进程号
ps -aux | grep nginx
### 1、启动nginx前,先测试配置文件是否正确
nginx -t #### 默认测试 /usr/local/nginx/nginx.conf 配置文件;
nginx -t -c **/nginx.conf #### 测试你想要的nginx配置文件;
### 2、启动nginx
nginx
./usr/local/bin/nginx
### 3、停止nginx (一般通过-s 发送信号的方式)
nginx -s stop/quit #### (*推荐*)
###### 知道了主进程号后,可以通过杀进程方式停止nginx
kill -QUIT pid #### 从容停止
kill -TERM pid #### 快速停止
kill -9 pid #### 前置停止
### 4、重启nginx, 修改.conf 配置文件后需要重启
nginx -s reload
kill -HUP pid/path #### 通过nginx的进程号平滑重启
### 5、制定配置文件 -c
nginx -c /usr/local/nginx/nginx.conf
### 6、查看nginx版本
nginx -v ####版本号
nginx -V ####详细版本信息
4、nginx的基础配置(与Mac配置基本一致)
5、nginx新增模块
- 1、查看nginx的版本信息和模块信息
nginx -V
显示信息:
nginx version: nginx/1.11.12
built by gcc 4.8.5 (Red Hat 4.8.5-11)(GCC)
configure arguments: --prefix=/usr/local/nginx
2、查看nginx的可用模块
进入到安装文件夹(/usr/local/downloads/nginx)
./configure --help
显示一堆with-http.....之类的,这些都是可以安装的模块3、输入要安装模块
./configure --prefix=/usr/local/nginx --with... #想要加什么模块,在后面加什么
如:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
4、新增模块
make
make install
5、检查新增是否成功
nginx -V #如果后面的configure arguments有了你要的参数,则添加成功
6、开机自启动
- 首先需要编写开机启动的shell脚本
vim /etc/init.d/nginx
脚本如下:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=(basename nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x nginx ] || exit 5
[ -f NGINX_CONF_FILE ] || exit 6
echo -n "Starting prog: "
daemon nginx -c NGINX_CONF_FILE
retval=?
echo
[ retval -eq 0 ] && touch lockfile
return retval
}
stop() {
echo -n "Stopping prog: "
killproc prog -QUIT
retval=?
echo
[ retval -eq 0 ] && rm -f lockfile
return retval
}
restart() {
configtest || return ?
stop
start
}
reload() {
configtest || return ?
echo -n "Reloading prog: "
killproc nginx -HUP
RETVAL=?
echo
}
force_reload() {
restart
}
configtest() {
nginx -t -c NGINX_CONF_FILE
}
rh_status() {
status prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "1" in
start)
rh_status_q && exit 0
1
;;
stop)
rh_status_q || exit 0
1
;;
restart|configtest)
1
;;
reload)
rh_status_q || exit 7
1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo "Usage: 0 {start|stop|status|restart|condrestart|try-restart|reload|force-
reload|configtest}"
exit 2
esac
修改文件权限
chmod a+x /etc/init.d/nginx
修改开机自启动
chkconfig --add nginx #添加到服务列表
chkconfig nginx on #设置开机自启动
三、MySQL
1.下载安装MySQL
下载地址:MySQL官网下载界面Community Server
注意别下载错了。。。是Community Server里的源码
下载安装包:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.17.tar.gz
解压安装包并重命名
tar -zxvf mysql-boost-5.7.17.tar.gz
查看是否已经有my.cnf 配置文件
locate my.cnf
mv my.cnf my.cnf.backup
创建文件安装目录
mkdir /usr/local/mysql
mkdir /usr/local/mysql/data
建立组和用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
编译
cd /root/downloads/mysql-5.7.17
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_BOOST=boost
#如果编译出错,发生cmake error,那就看看错误信息,缺少哪个依赖就yum install哪个
安装
make & make install
坑1:
#如果make的时候,到40%多可能会报下面的错:
c++: 编译器内部错误:已杀死(程序 cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] 错误 4
make[1]: *** [sql/CMakeFiles/sql.dir/all] 错误 2
make: *** [all] 错误 2
#[原因是:http://blog.csdn.net/cryhelyxx/article/details/47610247]
#原因是内存空间不够,具体解决措施是:
dd if=/dev/zero of=/swapfile bs=1k count=2048000 #获取要增加的2G的SWAP文件块
mkswap /swapfile #创建SWAP文件
swapon /swapfile #激活SWAP文件
swapon -s #查看SWAP信息是否正确
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab #添加到fstab文件中让系统引导时自动启动
#注意, swapfile文件的路径在/var/下
#编译完后, 如果不想要交换分区了, 可以删除:
swapoff /swapfile
rm -fr /swapfile
2
设置目录权限
cd /usr/local/mysql
chown -R root:mysql . #把当前目录中所有文件的所有者所有者设为root,所属组为mysql
chown -R mysql:mysql data
复制配置文件
cp support-files//my-default.cnf /etc/my.cnf
初始化mysql,开启ssl
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
设置开机自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig mysql on
修改配置文件
vim /etc/my.cnf
>>>
[mysqld]
datadir=/usr/local/mysql/data
default-storage-engine=MyISAM
log-error = /usr/local/mysql/mysql_error.log
pid-file = /usr/local/mysql/mysql.pid
user = mysql
tmpdir = /tmp
<<<
四、PHP
1.下载PHP5.6
下载方法有各种,我是通过官网下载到Mac然后上传到服务器的,因为这样速度快点
2.编译安装PHP
# 编译配置:来源于网上[http://blog.csdn.net/zhang_xinxiu/article/details/51817653]
./configure \
--prefix=/usr/local/php56 \
--with-config-file-path=/usr/local/php56/etc \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-opcache \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gettext \
--enable-mbstring \
--with-iconv \
--with-mcrypt \
--with-mhash \
--with-openssl \
--enable-bcmath \
--enable-soap \
--with-libxml-dir \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--with-curl \
--with-zlib \
--enable-zip \
--with-bz2 \
--with-readline
# 安装目录
--prefix
# 配置文件php.ini位置
--with-config-file-path
# 优化选项
--enable-inline-optimization
--disable-debug
--disable-rpath
--enable-shared
# 启用opcache
--enable-opcache
# 配置php-fpm
--enable-fpm
--with-fpm-user
--with-fpm-group
# 配置MySQL
--with-mysql
--with-mysqli
--with-pdo-mysql
# 国际化与字符编码支持
--with-gettext
--enable-mbstring
--with-iconv
# 加密
--with-mcrypt
--with-mhash
--with-openssl
# 数学扩展
--enable-bcmath
# Web 服务,soap 依赖 libxml
--enable-soap
--with-libxml-dir
# 进程,信号及内存
--enable-pcntl
--enable-shmop
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
# socket & curl
--enable-sockets
--with-curl
# 压缩与归档
--with-zlib
--enable-zip
--with-bz2
# GNU Readline 命令行快捷键绑定
--with-readline
# 一般需要提示你缺了啥依赖包,需要安装
# 反正报啥错就增加啥
添加依赖包
yum install libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel readline-devel
编译安装
make && make install
3.新增配置文件
配置文件夹路径: /usr/local/php56/etc
复制配置文件
1.php配置文件php.ini
cp php.ini-development /usr/local/php56/etc/php.ini
# 这里有一点需要提示大家,安装包内的php.ini配置文件有两个:
## 1.php.ini-production 安全性较高,一般用于生产
## 2.php.ini-development 一般用于开发
# 因为第二个比第一个显示的错误信息更多会暴露用户一些信息,
# 所以一般产品要正式使用的话建议用production,要用哪个就复制哪个为php.ini
2.php-fpm配置文件php-fpm.conf
cd /usr/local/php56/etc
cp php-fpm.conf.default php-fpm.conf
3.复制启动脚本
cd /downloads/php-5.6.30/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
4.把php可执行的命令添加到profile中
echo "PATH=PATH:/usr/local/php56/bin:/usr/local/php56/sbin" >> /etc/profile
source /etc/profile
# 这样就可以直接执行 'php-fpm' 了.
5.设置php-fpm开机自启动
chkconfig --add php-fpm
chkconfig php-fpm on
到此为止一共做了三件事:
1.创建php的配置文件
2.创建php-fpm的配置文件
3.创建php-fpm的启动脚本
4.引入php等可执行命令
5.php自启动
4.修改配置文件
- 修改php-fpm配置文件php-fpm.conf
;include=etc/fpm.d/*.conf
;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;
[global]
;prefix 应用根目录在/usr/local/php56
;Pid文件 :默认var/run/php-rpm.pid
pid = run/php-fpm.pid
; 错误日志 :默认在var/log/php-fpm.log
error_log = log/php-fpm.log
; 写入错误日志的级别:alert, error, warning, notice(默认), debug
log_level = error
; 表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数
; 如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个默认值都是0
emergency_restart_threshold = 60
;单位可以是s(econd)(默认),m(minutes),h(hours),d(ays)
emergency_restart_interval = 60
; 限制子进程接受主进程复用信号的超时时间(默认是0s)
; 单位: s(econds)(默认单位), m(inutes), h(ours), or d(ays)
process_control_timeout = 0
; 最大进程数
; process.max = 128
; 主进程的优先级,由高到低是-19~20
; process.priority = -19
; 后台执行fpm,默认值为yes,
; 如果为了调试可以改为no。
; 在FPM中,可以使用不同的设置来运行多个进程池。
; 这些设置可以针对每个进程池单独设置。
daemonize = yes
;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
[www]
; Per pool prefix
; It only applies on the following directives:
; - 'access.log'
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
; - 'chdir'
; - 'php_values'
; - 'php_admin_values'
;prefix = /path/to/pools/$pool
; 启动进程的账户和组
user = nginx
group = nginx
; fpm监听端口,即nginx中php处理的地址,一般默认值即可。
; 常用格式有 'ip:port'、'port'、'/path/to/unix/socket'
listen = 127.0.0.1:9000
; backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。
;listen.backlog = 65535
; unix socket设置选项,如果使用tcp方式访问,这里注释即可。
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
;listen.acl_users =
;listen.acl_groups =
;listen.allowed_clients = 127.0.0.1
; process.priority = -19
; 如何控制子进程 对于专用服务器,pm可以设置为static
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives. With this process management, there will be
; always at least 1 children.
; pm.max_children - 子进程最大数
; pm.start_servers - 启动时的进程数
; pm.min_spare_servers - 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
; pm.max_spare_servers - 保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
; ondemand - no children are created at startup. Children will be forked when
; new requests will connect. The following parameter are used:
; pm.max_children - the maximum number of children that
; can be alive at the same time.
; pm.process_idle_timeout - The number of seconds after which
; an idle process will be killed.
; Note: This value is mandatory.
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.process_idle_timeout = 10s;
; 设置每个子进程重生之前服务的请求数.
; 对于可能存在内存泄漏的第三方模块来说是非常有用的.
; 如果设置为 '0' 则一直接受请求, 等同于 PHP_FCGI_MAX_REQUESTS 环境变量.
; 默认值: 0
pm.max_requests = 500
; FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
pm.status_path = /status
; ;FPM监控页面的ping网址.
; 如果没有设置, 则无法访问ping页面.
; 该页面用于外部检测FPM是否存活并且可以响应请求.
; 请注意必须以斜线开头 (/)。
ping.path = /ping
; 用于定义ping请求的返回响应.
; 返回为 HTTP 200 的 text/plain 格式文本.
; 默认值: pong.
;ping.response = pong
; 登录 log
access.log = log/$pool.access.log
; accessLog格式
; Default: "%R - %u %t \"%m %r\" %s"
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
;慢请求的记录日志
;配合request_slowlog_timeout使用
slowlog = log/$pool.log.slow
;当一个请求该设置的超时时间后
;就会将对应的PHP调用堆栈信息完整写入到慢日志中.
;设置为 '0' 表示 'Off'
request_slowlog_timeout = 0
; 设置单个请求的超时中止时间.
; 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用.
; 设置为 '0' 表示 'Off'.
; 当经常出现502错误时可以尝试更改此选项。
request_terminate_timeout = 0
; 设置文件打开描述符的rlimit限制.
; 默认值: 系统定义值默认可打开句柄是1024,
; 可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_files = 1024
; 设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
;rlimit_core = 0
; 启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
;chroot =
; 设置启动目录,启动时会自动Chdir到该目录.
; 所定义的目录需要是绝对路径.
; 默认值: 当前目录,或者/目录(chroot时)
;chdir = /var/www
; 重定向运行过程中的stdout和stderr到主要的错误日志文件中.
; 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null .
; 默认值: 空.
;catch_workers_output = yes
;clear_env = no
;security.limit_extensions = .php .php3 .php4 .php5
- 修改php配置文件php.ini
中文翻译在[github:https://github.com/HeDefine/PHP.ini-for-Chinese/tree/master](https://github.com/HeDefine/PHP.ini-for-Chinese/tree/master]