Building nginx from Sources
Centos7.2通过源码编译安装Nginx
第一步:安装编译所需工具
命令如下:【
yum install gcc
】
第二步:安装依赖包
命令如下:【
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel
】
- zlib: 为nginx提供gzip模块,需要zlib库支持,传输数据打包,省流量(但消耗资源)
- openssl: 为nginx提供ssl功能
- pcre: 为支持地址重写rewrite功能
第三步:下载nginx-1.12.0.tar.gz包
http://nginx.org/en/download.html
命令如下:[
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -xvzf nginx-1.12.0.tar.gz
cd nginx-1.12.0/
]
第四步:创建用来运行nginx的用户及组
【
groupadd www
useradd -g www -M -s /bin/false www
】
-g参数为www 用户指定了一个组。-M参数保证其不自动生成home目录。
-s 使用-s选项改变用户的登陆shell。
useradd --help 查看命令帮助
【备注:userdel -r username删除系统非root用户, 例如: userdel -r raocui】
【备注: id wwww
//查看用户www的信息 uid=1005(www) gid=1006(www) groups=1006(www)】
【备注: 查看系统用户组cat /etc/group | grep wwww】
【备注: 查看系统用户cat /etc/passwd| grep wwww】
第五步:编译源代码:
先使用./configure –help 查看编译帮助:
命令如下:【
./configure
--prefix=/usr/local/programfile/nginx
--sbin-path=/usr/local/programfile/nginx/sbin/nginx
--conf-path=/usr/local/programfile/nginx/nginx.conf
--pid-path=/usr/local/programfile/nginx/logs/nginx.pid
--error-log-path=/usr/local/programfile/nginx/logs/error.log
--http-log-path=/usr/local/programfile/nginx/logs/access.log
--build=nginxBuildName
--user=www
--group=www
--with-http_ssl_module
】
第六步:执行make 和 make install完成安装
编译好的nginx可以通过 /usr/local/nginx/nginx -V (具体路径以安装的为主) 查看编译时候的参数
Nginx 配置 域名
Configure NGINX to recognize new VirtualHosts (Server Blocks)
(https://www.godaddy.com/garage/how-to-install-and-configure-nginx-on-centos-7/)
Configure NGINX to serve for your domain
第一步:Create a new user for the webspace
$ groupadd www
$ useradd -g www -M -s /bin/false www
第二步:Create a new directory for the site DocumentRoot
$ sudo mkdir -p /usr/local/sites/evamtime.com/lumen_html
第三步:Let’s create a test index.html in this directory so that we have something to look at when we test the configuration later:
$ sudo vi /usr/local/sites/evamtime.com/lumen_html/index.html
第四步:Now that our directory and test index is created, we must give ownership of that directory over to the user in question. So following our previous example:
$ sudo chown -R www:www /usr/local/sites/evamtime.com/lumen_html
第五步:We need to also set permissions for this folder so that it can be viewed by the outside world:
$ sudo chmod 755 /usr/local/sites/evamtime.com/lumen_html
Configure NGINX to recognize new VirtualHosts (Server Blocks)
第一步:First, we need to set up our directories where the server blocks will live:
$ sudo mkdir /usr/local/programfile/nginx/vhost
第二步:Now we need to tell NGINX to use look at those directories for the server blocks. Open the global NGINX configuration file in the text editor of your choice. We will use vim:
$ sudo vi /usr/local/programfile/nginx/nginx.conf
第三步:Add these lines to the end of the http {} block, then save the file:
include /usr/local/programfile/nginx/vhost/*.conf;
Server_names_hash_bucket_size 64;
第四步:将所有的server{}注释掉
Configure the actual NGINX server blocks
第一步:Create a new file specifically for the server block for your site. The line below will do this and open it in vim.
sudo vi /usr/local/programfile/nginx/vhost/lumen.evamtime.com.conf
第二步:We are going to paste a new NGINX server block in here, which should look like this:(备注:如下server{}只是demo, 而且仅用于html文件)
server {
listen 80;
server_name nginxsite.com www.nginxsite.com;
location / {
root /var/www/nginxsite.com/public_html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Nginx php 配置域名访问:
vi /usr/local/programfile/nginx/vhost/lume.evamtime.com.conf
server {
listen 80;
server_name lumen.evamtime.com;
index index.html index.htm index.php;
root /usr/local/sites/evamtime.com/lumen_html/public;
#charset koi8-r;
#access_log logs/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.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 /usr/local/sites/evamtime.com/lumen_html/public;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
#location /nginx_status
#{
#stub_status on;
#access_log off;
#}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*.(js|css)?$
{
#expires 12h;
}
location ~ /.
{
deny all;
}
access_log /usr/local/programfile/nginx/logs/lumen_access.log;
}
$ sudo vi /usr/local/programfile/nginx/nginx.conf
在http{}的大括号里新增:
include vhost/*.conf;
server_names_hash_bucket_size 64;
ln -s /usr/local/programfile/nginx/sites-available/lumen.evamtime.conf /usr/local/programfile/nginx/sites-enabled/lumen.evamtime.conf
【备注1:使用 sudo /usr/local/programfile/nginx/sbin/nginx -t
对nginx配置文件进行检查】
【备注2:保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的】
【备注3: sudo /usr/local/programfile/nginx/sbin/nginx -s reload 】
Nginx+Center OS 7.2 开机启动设置
centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。
Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令systemcel enable nginx.service设置开机启动即可。
在这里我是用源码编译安装的,所以要手动创建nginx.service服务文件。
开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:
/lib/systemd/system/
步骤如下:
第一步:在系统服务目录里创建nginx.service文件
vi /lib/systemd/system/nginx.service
内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/programfile/nginx/sbin/nginx
ExecReload=//usr/local/programfile/nginx/sbin/nginx -s reload
ExecStop=/usr/local/programfile/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
保存退出。
第二步:设置开机启动
systemctl enable nginx.service
第三步:其他命令:
启动nginx服务
Systemctl start nginx.service
设置开机启动
Systemctl enable nginx.service
停止开机自启动
Systemctl disable nginx.service
查看服务当前状态:
Systemctl status nginx.service
重新启动服务:
Systemctl restart nginx.service
查看所有已启动的服务:
Systemctl list-units --type=service
腾讯云主机需要开放安全组里的80端口
Centos 7防火墙firewalld开放80端口
命令如下:【
firewall-cmd --zone=public --add-port=80/tcp --permanent
】
centos7 安装 mariadb 的正确命令
(https://www.liquidweb.com/kb/how-to-install-mysql-mariadb-on-centos-7/)
命令: yum -y install mariadb*
yum -y install mariadb-server mariadb
systemctl start/restart/stop/status mariadb
systemctl enable mariadb
ps -ef | grep msyqld
[root@localhost ~]# mysql
[root@localhost ~]# mysql_secure_installation
Centos7.2 编译安装PHP7
http://cn2.php.net/manual/zh/install.unix.nginx.php --官网文档,源码安装PHP
安装前 , 检查PHP是否已经安装:
$ php -v
$ find / -name “*php*”
$ rpm -q -a | grep php
【针对rpm查出来的包, 用命令 sudo rpm -e php71w-common删除】
直接下载PHP7.0.2的安装包解压,编译,安装:
下载php7,并解压
$ cd /usr/src/
$ wget http://cn2.php.net/distributions/php-7.0.25.tar.gz
#解压
$ tar -xzxvf php-7.0.2.tar.gz
$ cd php-7.0.2
解压完后先不要编译,请检查是否安装了gcc ,没有的话执行yum install gcc
检查是否安装了libxml2 ,没有的话执行yum install libxml2
检查是否安装了libxml2-devel,没有的话执行yum install libxml2-devel
注:因为改为用nginx了,所以编译参数中的--with-apxs2=/usr/bin/apxs去掉了,如果要配置apache用,安装PHP前,请先安装apache。
编译参数配置
'./configure' '--prefix=/usr/local/programfile/php' '--with-pdo-pgsql' '--with-zlib-dir' '--with-freetype-dir' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl' '--with-mcrypt' '--with-gd' '--with-pgsql' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-pcntl' '--enable-mbregex' '--enable-exif' '--enable-bcmath' '--with-mhash' '--enable-zip' '--with-pcre-regex' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--with-openssl' '--with-fpm-user=www-data' '--with-fpm-group=www-data' '--with-libdir=/lib/x86_64-linux-gnu/' '--enable-ftp' '--with-gettext' '--with-xmlrpc' '--with-xsl' '--enable-opcache' '--enable-fpm' '--with-iconv' '--with-xpm-dir=/usr'
出现报错 Cannot find OpenSSL's <evp.h>
则执行 yum install openssl openssl-devel
出现报错 Please reinstall the libcurl distribution
则执行 yum -y install curl-devel
出现报错 jpeglib.h not found
则执行 yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
和执行yum install libjpeg-devel
checking for BZip2 in default path... not found
configure: error: Please reinstall the BZip2 distribution
这是bzip2软件包没有安装
解决办法
yum install bzip2-devel.x86_64 -y
configure: error: xpm.h not found.
yum install libXpm-devel
error: Unable to locate gmp.h
Fix: yum install gmp-devel
现象:Unable to detect ICU prefix or /usr//bin/icu-config failed. Please verify ICU install
prefix and make sure icu-config works
解决办法:sudo yum install -y icu.x86_64 libicu libicu_devel
错误:mcrypt.h not found. Please reinstall libmcrypt.
解决办法:sudo yum install php-mcrypt.x86_64 libmcrypt libmcrypt-devel.x86_64
错误: configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
解决办法:sudo yum install postgresql-devel.x86_64
错误 : configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
解决: yum install libxslt-devel
配置的checking 结束后,执行:
make clean && make && make install
安装完成后,我们要把源码包中的配置文件复制到PHP安装目录下,源码包中有两个配置 php.ini-development php.ini-production ,看名字就知道,一个是开发环境,一个是生产环境,我们这里就复制开发环境的
sudo cp /usr/local/src/php-7.0.25/php.ini-development /usr/local/programfile/php/php.ini
sudo cp /usr/local/programfile/php/etc/php-fpm.conf.default /usr/local/programfile/php/etc/php-fpm.conf
sudo vi /usr/local/programfile/php/php.ini
修改:cgi.fix_pathinfo=0
另外还需要设置环境变量 :
修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
PATH=$PATH:/usr/local/php/bin
export PATH
然后执行 命令 source /etc/profile
php -v 就可以看到PHP版本信息了。
此时还需要配置PHP-fpm:
cp /usr/local/programfile/php/etc/php-fpm.conf.default /usr/local/programfile/php/etc/php-fpm.conf
cp /usr/local/programfile/php/etc/php-fpm.d/www.conf.default /usr/local/programfile/php/etc/php-fpm.d/www.conf
启动php-fpm:
cp /usr/local/src/php-7.0.25/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
重启php-fpm:
$ /etc/init.d/php-fpm restart
sudo /etc/init.d/php-fpm status
【
报错: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
解决方案:
$ netstat -ntlp | grep 9000
$ killall php-fpm
$ /etc/init.d/php-fpm start
】
【 备注:sudo cp /usr/local/src/php-7.0.25/sapi/fpm/php-fpm /usr/local/bin
启动php-fpm:
$ /usr/local/bin/php-fpm
】
修改 PHP-FPM listen 的方式
nginx与php-fpm通信的两种方式
若想將 PHP-FPM listen 的方式,改成 unix socket,可以編輯
sudo /usr/local/programfile/php/etc/php-fpm.d/www.conf
將
listen = 127.0.0.1:9000
改成
listen = /var/run/php-fpm.sock
註:不要改成 listen = /tmp/php-fcgi.sock (將 php-fcgi.sock 設定在 /tmp 底下), 因為系統產生 php-fcgi.sock 時,會放在 /tmp/systemd-private-*/tmp/php-fpm.sock 隨機私有目錄下, 除非把 /usr/lib/systemd/system/ 裡面的 PrivateTmp=true 設定改成 PrivateTmp=false, 但還是會產生其他問題,所以還是換個位置最方便
sudo vi /usr/local/programfile/nginx/enable-php-lumen.conf
将
fastcgi_pass unix:/var/run/php-fpm.sock;
重启nginx 和 php-fpm后,
这样配置好后,就会在/var/run/php-fpm/目录下自动生成一个php5-fpm.sock文件,然后一切OK。
【备注:php-fpm.sock不存在, 怎么生成?见自己博客
配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
】
然後重新啟動 php-fpm
systemctl restart php-fpm
Nginx访问PHP文件的File not found错误处理,