在centos 7 下安装 nginx-1.11前需要先切换到root环境,通过命令su root 切换,然后再输入密码, 如果不能切换需要把下载的nginx文件夹给予777的权限
su root
下载nginx-1.11.10的压缩包文件到根目录
yum update #更新系统软件
cd /
wget nginx.org/download/nginx-1.11.10.tar.gz
解压tar.gz压缩包文件,进去nginx-1.11.10
tar -xzvf nginx-1.11.10.tar.gz
cd nginx-1.11.10
进去后如果发现有configure这个文件,说明这个源码包安装前需要先进行配置,主要是为了检查当前的环境是否满足要安装软件的依赖关系,如果没有这个文件说明是二进制包,解压后直接使用不用configure
./configure
通过安装前的配置检查,发现有报错 检查中发现一些依赖库没有找到,这时候需要先安装nginx的一些依赖库
yum -y install pcre* #安装使nginx支持rewrite
yum -y install gcc-c++
yum -y install zlib*
yum -y install openssl openssl-devel
再次进行检查操作 ./configure 没发现报错显示,接下来进行编译并安装的操作
#检查模块支持
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module --with-threads --user=www --group=www
编译并安装
make && make install
编译安装可能出现的问题
#错误1
src/core/ngx_murmurhash.c: In function ‘ngx_murmur_hash2’:
src/core/ngx_murmurhash.c:37:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[2] << 16;
~~^~~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:38:5: note: here
case 2:
^~~~
src/core/ngx_murmurhash.c:39:11: error: this statement may fall through [-Werror=implicit-fallthrough=]
h ^= data[1] << 8;
~~^~~~~~~~~~~~~~~
src/core/ngx_murmurhash.c:40:5: note: here
case 1:
^~~~
cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:432: objs/src/core/ngx_murmurhash.o] Error 1
#解决:
1、使用编辑器打开nginx/objs/Makefile,删除CFLAGS中的-Werror
CC = cc
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g
CPP = cc -E
LINK = $(CC)
2、重新进行make操作即可
#错误2
src/os/unix/ngx_user.c: In function ‘ngx_libc_crypt’:
src/os/unix/ngx_user.c:35:7: error: ‘struct crypt_data’ has no member named ‘current_salt’
cd.current_salt[0] = ~salt[0];
^
make[1]: *** [objs/Makefile:712: objs/src/os/unix/ngx_user.o] Error 1
#解决:
1、vi /nginx-1.11.10/src/os/unix/ngx_user.c
2、在如下位置将 cd.current_salt[0] = ~salt[0] 注释
#ifdef __GLIBC__
/* work around the glibc bug */
/* cd.current_salt[0] = ~salt[0]; */
#endif
3、重新编译
查看nginx安装后在的目录,可以看到已经安装到 /usr/local/nginx 目录了
whereis nginx
nginx: /usr/local/nginx
启动nginx服务
cd /usr/local/nginx/sbin/
./nginx
服务启动的时候报错了:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) ,通过命令查看本机网络地址和端口等一些信息,找到被占用的80端口(netstat -ntpl)的tcp连接,并杀死进程(kill 进程pid)
netstat -ntpl
kill 进程PID
继续启动nginx服务,启动成功
./nginx
nginx安装好后在/usr/local/nginx/conf下不会自动创建vhosts文件夹,为了方便管理可以手动创建vhosts文件夹
mkdir /usr/local/nginx/conf/vhosts
修改配置文件,引入vhosts文件夹
vi /usr/local/nginx/conf/nginx.conf
加上 include vhosts/*.conf;
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include vhosts/*.conf;
}
#创建开机启动命令脚本文件:
vi /etc/init.d/nginx
在这个nginx文件中插入一下启动脚本代码,启动脚本代码来源网络复制,实测有效
#! /bin/bash
# chkconfig: - 85 15
PATH=/usr/local/nginx
DESC="nginx daemon"
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/conf/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
scriptNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
$DAEMON -s stop || echo -n "nginx not running"
}
do_reload() {
$DAEMON -s reload || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $scriptNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
设置所有人都有对这个启动脚本nginx文件的执行权限
chmod a+x /etc/init.d/nginx
把nginx加入系统服务中
chkconfig --add nginx
把服务设置为开机启动
chkconfig nginx on
reboot重启系统生效
#启动nginx服务
systemctl start nginx.service
#停止nginx服务
systemctl stop nginx.service
#重启nginx服务
#同时也可以通过下面的命令进行服务重启,停止操作
service nginx restart
service nginx start
service nginx stop
注意:启动可能报如下错误(window下复制启动脚本换行符导致)
env: ‘/etc/init.d/nginx’: No such file or directory
#解决:运行下面指令,在重新启动,下面安装php如遇类似问题也一样解决
dos2unix /etc/init.d/nginx
如果服务启动的时候出现 Restarting nginx daemon: nginxnginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
nginx not running 的错误,通过nginx -c 参数指定配置文件即可解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
如果服务启动中出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 的错误,可以先通过service nginx stop 停止服务,再启动就好。
目前官网已经出到 PHP8.0 ,这里以安装相对稳定的php7为例
#在官网下载php-7.1.3的php压缩包
wget -c http://cn2.php.net/distributions/php-7.1.3.tar.gz
下载好后解压 php-7.1.3.tar.gz 压缩包,并进入解压后的目录
tar -xzvf php-7.1.3.tar.gz
cd php-7.1.3
安装php7需要的一些依赖库包 libxml2和一些其他依赖的扩展库
yum -y install libxml2
yum -y install libxml2-devel
yum -y install openssl
yum -y install openssl-devel
yum -y install curl-devel
yum -y install libjpeg-devel
yum -y install libpng-devel
yum -y install freetype-devel
yum -y install bzip2-devel
yum -y install libmcrypt libmcrypt-devel
yum -y install postgresql-devel
yum -y install aspell-devel
yum -y install readline-devel
yum -y install libxslt-devel
yum -y install net-snmp-devel
yum -y install unixODBC-devel
yum -y install libicu-devel
yum -y install libc-client-devel
yum -y install libXpm-devel
yum -y install libvpx-devel
yum -y install enchant-devel
yum -y install openldap
yum -y install openldap-devel
yum -y install db4-devel
yum -y install gmp-devel
yum -y install sqlite-devel
yum -y install mysql-devel
添加用户和组
groupadd -r www && useradd -r -g www -s /sbin/nologin
安装前的环境配置检查,php7的一些依赖包的检查和php扩展的启动,这个过程如果缺少php依赖的库包会有报错提示。
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-xmlrpc --with-openssl --with-mcrypt --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-libmbfl --with-onig --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear --enable-opcache
对php7进行编译和安装的操作
make && make install
#以下是编译安装常见的一些错误及处理方法,笔者安装php7.1正常,安装php7.3有报错,主要和zip有关
#错误一: ERROR: [pool www] cannot get uid for user 'www'
#解决:(缺少www用户和用户组)
groupadd www
useradd -g www www
#错误一: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
#解决:
yum install -y epel-release
yum install -y libmcrypt-devel
#错误二: configure: error: Please reinstall the libzip distribution
#解决:
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
#错误三:configure: error: off_t undefined; check your library configuration
#解决:
# 添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
# 更新配置
ldconfig -v
#错误四:/usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or dire
#解决:
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
#错误五:make: *** [sapi/cli/php] Error 1
#解决:
make ZEND_EXTRA_LIBS='-liconv'
编译成功,查看php版本
/usr/local/php/bin/php -v
运行php-fpm
/usr/local/php/sbin/php-fpm
启动php-fpm可能会遇到的错误,基本都是配置文件配置和重命名的问题:
错误一:缺少www.conf配置文件(WARNING: Nothing matches the include pattern /usr/local/php/etc/php-fpm.d/*.conf),需要把/usr/local/php/etc/php-fpm.d/*.conf目录中的www.conf.default重名名为www.conf。
错误二:缺少php-fpm.conf配置文件 需要在/usr/local/php/etc/php-fpm.conf 把默认的配置文件php-fpm.conf.default改成php-fpm.conf
错误三:缺少php.ini配置文件 php7编译安装好后会发现没有php.ini配置文件,需要在解压包的根目录中复制php.ini-production或php.ini-development并重命名为php.ini到php编译好的安装目录中的/usr/local/php/etc文件夹即可。
开启配置php-fpm pid
#找到php-fpm.conf配置文件
/usr/local/php/etc/php-fpm.conf
#开启pid ,去掉分号注释
pid = run/php-fpm.pid
创建开机启动脚本
vim /etc/init.d/php-fpm #编辑 i
#! /bin/sh
#chkconfig: 2345 15 95
# Comments to support chkconfig on CentOS
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="php-fpm daemon"
NAME=php-fpm
DAEMON=/usr/local/php/sbin/$NAME
CONFIGFILE=/usr/local/php/etc/php-fpm.conf
PIDFILE=/usr/local/php/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
d_start() {
$DAEMON -y $CONFIGFILE || echo -n " already running"
}
d_stop() {
kill -QUIT `cat $PIDFILE` || echo -n " not running"
}
d_reload() {
kill -HUP `cat $PIDFILE` || echo -n " can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC is success"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC is success"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC is success"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
对开机启动脚本添加所有人都执行的权限
chmod a+x /etc/init.d/php-fpm
php-fpm加入开机启动服务
chkconfig --add php-fpm
chkconfig php-fpm on
查看开机启动的所有服务
chkconfig --list
服务操作
#启动服务
service php-fpm start
#停止服务
service php-fpm stop
#重启服务
service php-fpm reload
#第一步
/usr/local/php/bin/pecl install mongodb
#第二步 写入配置文件
echo "extension=mongodb.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
#第一步
/usr/local/php/bin/pecl install redis
#第二步 写入php配置文件
echo "extension=redis.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
可以参考:【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7.