phpinfo();php
打印环境查看其中的 Thread Safety 项,这个项目就是查看是不是线程安全若是是:enabled,通常来讲应该是ts版,不然是nts版。
TS(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其余线程不能进行访问直到该线程读取完,其余线程才可以使用。好处是不会出现数据不一致或者数据污染的状况,但耗费的时间要比 NTS 长。PHP以 ISAPI 方式加载的时候选择TS版本。html
TS:有php7apache2_4.dll文件mysql
NTS(None-Thread Safe)即非线程安全,就是不提供数据访问保护,有可能出现多个线程前后或同时操做同一数据的状况,容易形成数据错乱(即脏数据),通常操做的执行时间要比 TS 短。linux
php以fast-cgi方式运行的时候选择NTS版本,具备更好的性能。nginx
NTS:没有php7apache2_4.dll文件c++
php在windows下分为TS版和NTS版web
Linux上的PHP一样有NTS和TS版本的区别,默认是NTS版本,configure时加上--enable-maintainer-zts则编译为TS版本正则表达式
何时须要TS版本呢?算法
好比你要使用pthreads这个多线程的PECL扩展时,或者PHP以MOD_PHP嵌入多线程运行下的Apache,sql
好比Apache在Linux上提供的Event MPM就是一个多进程多线程的工做模型,Windows上Apache采用的WinNT MPM也是一个多线程模型,
这时都须要TS版本的PHP.
而若是以PHP-FPM(好比搭配Nginx或者Apache的mod_fastcgi)
或者PHP-CGI(好比搭配Apache的mod_fcgid或者Win上的IIS)来运行PHP,
则通常都不须要TS线程安全版本的PHP.
以 FAST-CGI 或 PHP-FPM 方式运行就用NTS 非线程安全版在windows系统下
Apache + PHP 组合,以 ISAPI 的方式运行。用 TS 线程安全版。
若IIS,以isapi模式运行PHP使用TS版,以FastCGI模式运行PHP使用NTS版。
在linux系统下
Apache + PHP,PHP通常做为Apache 的模块进行运行 选TS。
Nginx + PHP ,(以php-fpm的方式运行)选NTS
它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序链接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎能够在任何操做系统上实现。CGI方式在遇到链接请求(用户 请求)先要建立cgi的子进程,激活一个CGI进程,而后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。因此用cgi方式的服务器有多少链接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要缘由。都会当用户请求数量很是多时,会大量挤占系统的资源如内 存,CPU时间等,形成效能低下。
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它能够一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。补充:
FAST-CGI 是微软为了解决 CGI 解释器的不足而提出改进方案。当一个请求向 web server 发送请求时,web server总会fork一个CGI解释器进程进行处理这个请求,进程处理完成以后将结果返回给web server,web server将结果返回并显示出来,进程结束,当用户再次请求同一个页面时,web server又会fork一个新进程进行请求处理,这样效率会比较低下(CGI被人诟病的主要缘由)。而采用FAST-CGI 解释器的 话,当一个请求执行完毕后不会注销该进程,而是将改进程进入休眠期,当接收到新的请求时,从新启用改进程进行处理。FAST-CGI 较CGI 减小了进程的重复建立的资源占用。
PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。也就是说,PHP不单能够写前台网页,它还能够用来写后台的程序。 PHP的CLI Shell脚本适用于全部的PHP优点,使建立要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。
模块模式是以mod_php5模块的形式集成,此时mod_php5模块的做用是接收Apache传递过来的PHP文件请求,并处理这些请求,而后将处理后的结果返回给Apache。若是咱们在Apache启动前在其配置文件中配置好了PHP模块(mod_php5), PHP模块经过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。除了这种启动时的加载方式,Apache的模块能够在运行的时候动态装载,这意味着对服务器能够进行功能扩展而不须要从新对源代码进行编译,甚至根本不须要中止服务器。咱们所须要作的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器从新载入模块。可是在动态加载以前,咱们须要将模块编译成为动态连接库。此时的动态加载就是加载动态连接库。 Apache中对动态连接库的处理是经过模块mod_so来完成的,所以mod_so模块不能被动态加载,它只能被静态编译进Apache的核心。这意味着它是随着Apache一块儿启动的。
一般是指被http服务器所加载,以服务器的模块形式运行,由微软提出,故只能在win平台上运行,例如win下的apache,iis
ISAPI(Internet Server Application Program Interface)是微软提供的一套面向Internet服务的API接口,一个ISAPI的DLL,能够在被用户请求激活后长驻内存,等待用户的另外一个请求,还能够在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(因为微软的排他性,只能运行于windows环境)
PHP做为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就当即使用这些空余的子进程进行处理,这样就不存在生成子进程形成的延迟了。这些服务器副本在处理完一次HTTP请求以后并不当即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
备注:在PHP5.3之后,PHP再也不有ISAPI模式,安装后也再也不有php5isapi.dll这个文件。要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,而后使IIS6支持FastCGI。
PHP-FPM是什么 (php-Fastcgi Process Manager 进程管理器)
php-fpm 是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则通常有多个 (具体数量根据实际须要配置),每一个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。PHP-FPM提供了更好的PHP进程管理方式,能够有效控制内存和进程、能够平滑重载PHP配置,在./configure的时候带 –enable-fpm参数便可开启PHP-FPM,
查看系统可用的yum源和全部的yum源
yum repolist enabled yum repolist all
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all # 清除系统全部的yum缓存 yum makecache # 生成yum缓存
yum list | grep epel-release
yum install -y epel-release
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all # 清除系统全部的yum缓存 yum makecache # 生成yum缓存
LAMP - CentOS7+Apache2.4+MySQL8+PHP7.3
首先,要确认下是否有安装过,或者是系统自带了httpd服务
#检查而且显示Apache相关安装包 rpm -qa | grep httpd
或者:
yum list installed | grep httpd
卸载httpd,首先要中止httpd服务:
systemctl stop httpd.service
而后经过 rpm -e 或者yum remove 命令均可以,不过rpm -e命名必需要本身先卸载依赖包,因此我用yum remove命令卸载:
yum remove httpd.x86_64
列出yum 仓库里面的httpd项,命令以下:
yum list | grep httpd
看到有可用项以后,输入如下命令进行安装:
yum install -y httpd
将Apache加入到开机自启动中
systemctl enable httpd.service
启动服务:
systemctl start httpd.service
查看httpd的运行状态:
systemctl status httpd.service
若是正在运行防火墙(firewalld),则还须要打开HTTP和HTTPS端口80和443:
firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --zone=public --add-service=https --permanent 或者 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent --zone 做用域 --add-port=80/tcp 添加端口 格式为:端口/协议 --parmanent 永久生效 没有此参数重启后失效 firewall-cmd --reload
默认的www目录在/var/www/html/下面,因此咱们写入一个html文件,查看下怎么样了,输入一下命令建立一个包含hello world字符串的文件:
echo 'hello world' > /var/www/html/index.html
而后,咱们用curl访问下本地:
curl 127.0.0.1
已经在正常服务啦!
服务目录 | /etc/httpd |
---|---|
主配置文件 | /etc/httpd/conf/httpd.conf |
虚拟主机项目配置文件 | /etc/httpd/conf.d/ |
网站根目录 | /var/www/html |
访问日志 | /var/log/httpd/access_log |
错误日志 | /var/log/httpd/error_log |
在httpd服务程序主配置文件中最为经常使用的参数以下:
ServerRoot | 服务安装目录 |
---|---|
ServerAdmin | 管理员邮箱 |
User | 运行服务的用户 |
Group | 运行服务的用户组 |
ServerName | 网站服务器的域名 |
DocumentRoot | 站点默认主目录 |
Listen | 监听的IP地址与端口号 |
DirectoryIndex | 默认的索引页页面 |
ErrorLog | 错误日志文件 |
CustomLog | 访问日志文件 |
Timeout | 网页超时时间,默认为300秒. |
Include | 须要加载的其余文件 |
咱们能够像任何其余系统单元同样管理Apache服务。
#启动 systemctl start httpd #中止 systemctl stop httpd #重启 systemctl restart httpd #在进行一些配置更改后从新加载Apache服务: systemctl reload httpd #开机启动 systemctl enable httpd #开机不启动 systemctl disable httpd #检查Apache是否已经安装了开机自动启动 systemctl list-unit-files | grep httpd
vim /etc/httpd/conf/httpd.conf
<IfModule mod_php7.c> AddType application/x-httpd-php .php </IfModule>
先检查rewrite模块是否打开,模块配置文件位于:/etc/httpd/conf.modules.d/00-base.conf
vim /etc/httpd/conf.modules.d/00-base.conf
在文件里搜索rewrite_module modules/mod_rewrite.so
,在所在行前面是否有#
,若是有的话,将#
删除,而后保存文件。
查看/etc/httpd/conf/httpd.conf文件是否已打开容许重写功能
在文件里搜索.htaccess
,咱们找到 以下注释对应的AllowOverride None
而后将 AllowOverride None 改为 AllowOverride All
注意改动的位置 由于该文件 有多处 AllowOverride None
,只有找到正确的位置才有效。
检查完前面两步,重启Apache服务
systemctl restart httpd
查看apache主配置文件,
vim /etc/httpd/conf/httpd.conf
确保存在如下配置,由于等下须要在conf.d/建立虚机主机配置
IncludeOptional conf.d/*.conf
另外,把 Require all denied默认拒绝访问设置为容许访问: Require all granted,方便测试。
<Directory /> AllowOverride none # Require all denied Require all granted </Directory>
关于虚拟主机项目配置文件,位于/etc/httpd/conf.d
目录,建议一个域名一个配置文件
虚拟主机配置文件规范:[域名].conf
vim /etc/httpd/conf.d/site1.com.conf <VirtualHost *:80> ServerName site1.com DocumentRoot "/var/www/html/site1.com" </VirtualHost>
vim /etc/httpd/conf.d/site2.com.conf <VirtualHost *:80> ServerName site2.com DocumentRoot "/var/www/html/site2.com" </VirtualHost>
建立网站目录,编写文件
mkdir /var/www/html/site1.com vim /var/www/html/site1.com/index.html I am site1.com
mkdir /var/www/html/site2.com vim /var/www/html/site2.com/index.html I am site2.com
修改物理主机hosts文件(C:WindowsSystem32driversetc),由于这里是由于物理机去访问Apache服务器
访问效果
扩展虚机主机配置文件
https://blog.csdn.net/tladagi...
<VirtualHost *:80> #绑定的域名 ServerName site1.com #绑定的域名别名 ServerAlias www.site1.com #网站主目录 DocumentRoot "/var/www/html/site1.com" #错误日志目录 ErrorLog "/var/log/httpd/site1.com/error.log" #访问日志目录 CustomLog "/var/log/httpd/site1.com/access.log" common <Directory "/var/www/html/site1.com/"> Options FollowSymLinks AllowOverride All #容许任意访问 Require all granted </Directory> </VirtualHost>
建立日志目录
cd /var/log/httpd mkdir site1.com cd site1.com touch error.log access.log
日志目录记得更改属主和属组为Apache,不然httpd启动失败
chown -R apache:apache /var/log/httpd/site1.com/
Require参考
Require all granted
无条件容许访问。Require all denied
访问被无条件拒绝。Require env env-var [env-var] ...
只有在给定的环境变量之一被设置的状况下才容许访问。Require method http-method [http-method] ...
只有给定的HTTP方法才容许访问。Require expr expression
若是表达式计算结果为true,则容许访问。Require user userid [userid] ...
只有指定的用户才能访问资源。Require group group-name [group-name] ...
只有指定组中的用户才能访问资源。Require valid-user
全部有效的用户均可以访问资源。Require ip 10 172.20 192.168.2
指定IP地址范围内的客户端能够访问资源。
Options
None:不支持任何选项Indexes:容许索引目录
FollowSymLinks:容许访问符号连接指向的原文件
Includes:容许执行服务端包含(SSI)
ExecCGI:容许容许CGI脚本
ALL:支持全部选项
隐藏HTTP请求头web服务器信息
没做任何设置前,查看web服务器响应头:
几乎把web服务器详细信息都暴出来了,会给攻击者提供最有攻击价值的安全信息,这是很是危险的。
将Apache的配置文件加上:
ServerTokens ProductOnly ServerSignature Off
而后重启Apache服务,再次请求
修改虚拟主机配置文件
mv tp5 site1.com vim site1.com.conf <VirtualHost *:80> #绑定的域名 ServerName site1.com #绑定的域名别名 ServerAlias www.site1.com #网站主目录 DocumentRoot "/var/www/html/site1.com/public" #错误日志目录 ErrorLog "/var/log/httpd/site1.com/error.log" #访问日志目录 CustomLog "/var/log/httpd/site1.com/access.log" common <Directory "/var/www/html/site1.com/public/"> Options FollowSymLinks AllowOverride All #容许任意访问 Require all granted </Directory> </VirtualHost>
在Centos中,咱们经过上述操做下载的项目代码是没有操做权限的,默认的归属者也是root用户。
而咱们使用TP和Apache访问网站时,须要代码目录有必定的操做权限,而且Apache用户是可操做方。
#修改权限: chmod -R 777 /var/www/html/tp5 #找到Apache对应的用户名,多是apache或www: cat /etc/passwd #修改apache用户可操做tp5目录: chown -R apache /var/www/html/tp5/ #临时关闭selinux模式 setenforce 0
重启Apache
systemctl restart httpd
httpd.conf配置文件修改
vim /etc/httpd/conf/httpd.conf #注释 #LoadModule php7_module modules/libphp7.so #<IfModule mod_php7.c> # AddType application/x-httpd-php .php #</IfModule> #加载这两个模块 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # 接受到php页面请求时,交给php引擎解释,而不是下载页面 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps # 将目录的默认索引页面改成index.php DirectoryIndex index.php index.html # 若是php-fpm使用的是TCP socket,那么在httpd.conf末尾加上: <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
虚拟主机配置
vim /etc/httpd/conf.d/site3.com.conf <VirtualHost *:80> #绑定的域名 ServerName site3.com #绑定的域名别名 ServerAlias www.site3.com #网站主目录 DocumentRoot "/var/www/html/site3.com" #错误日志目录 ErrorLog "/var/log/httpd/site3.com/error.log" #访问日志目录 CustomLog "/var/log/httpd/site3.com/access.log" common <Directory "/var/www/html/site3.com/"> Options FollowSymLinks AllowOverride All #容许任意访问 Require all granted </Directory> </VirtualHost>
站点文件
mkdir /var/www/html/site3.com vim /var/www/html/site3.com/index.php
因为linux的yum源不存在php7.x,因此咱们要更改yum源:
Remi 软件源 主要提供最新版的 PHP 软件包和其余一些 PHP 扩展工具包,它是针对 Fedora 和 RHEL 系分支变体 (包括:RHEL, CentOS, Oracle Linux 等等) 要安装 PHP,推荐使用 Remi 软件源。
安装源管理工具
yum install -y yum-utils #yum-utils是管理repository及扩展包的工具 (主要是针对repository)
安装 REMI 源:
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y remove php*
1、做为Apache模块 mod_php
对于php7.1使用remi-php71或对其余php7.x版本使用remi-php72或remi-php73或remi-php74
yum-config-manager --enable remi-php73
从启用的仓库上方安装php版本
yum -y install php-cli php-bcmath php-gd php-json php-mbstring php-mcrypt php-mysqlnd php-opcache php-pdo php-pecl-crypto php-pecl-mcrypt php-pecl-geoip php-pecl-swoole php-recode php-snmp php-soap php-xmll
安装更多扩展:
yum search php73
验证一下是否安装成功:
php -v
开启PHP报错
一、搜索并修改下行,把Off值改为On display_errors = Off 二、error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT 修改成:error_reporting=E_ALL
坑1:linux php 安装扩展包安装路径与phpinfo中extension_dir加载的路径不一致
php -i | grep 'extension_dir' #查看php扩展包安装路径
安装php的pdo以及gd库
#pdo的扩展: yum install php-pdo #pdo的mysql扩展: yum install php-pdo_mysql #gd库扩展: yum install php-gd #mbstring:扩展 yum -y install freetype-devel php-mbstring
2、PHP-FPM独立运行方式
安装PHP及扩展
yum -y install php-cli php-fpm php-bcmath php-gd php-json php-mbstring php-mcrypt php-mysqlnd php-opcache php-pdo php-pecl-crypto php-pecl-mcrypt php-pecl-geoip php-pecl-swoole php-recode php-snmp php-soap php-xmll
配置文件路径
#查找php.ini位置: find / -name php.ini #php-fpm 配置文件 /etc/php-fpm.d/www.conf
systemctl管理
systemctl enable php-fpm #开启开机自启 systemctl restart php-fpm #重启 systemctl start php-fpm #启动 systemctl stop php-fpm #关闭 systemctl status php-fpm #检查状态
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
#先检查系统是否装有mysql rpm -qa | grep mysql #删除可用 yum remove mysql-xxx-xxx-
rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
列出当前支持的MySQL数据库
yum repolist all | grep mysql
从上面能够看出,会默认下载5.7版本的MySQL数据库,而8.0版本的默认是关闭的
#先把5.7的禁用,启用MySQL 8.0数据库 vim /etc/yum.repos.d/mysql-community.repo 其中能够看到5.7版本, enabled=1, 改成enabled=0, 禁用掉 另外能够看到8.0版本, enabled=0, 改成enabled=1, 开启
yum install -y mysql-community-server
systemctl list-unit-files | grep mysqld #检查是否已经安装了开机自动启动 systemctl enable mysqld.service #设置开机自启动 systemctl start mysqld #启动 systemctl status mysqld #查看MySQL启动状态
默认目录/文件位置
/var/lib/mysql #数据库存储目录 /etc/my.cnf #配置文件
修改密码
MySQL安装完成以后会在LOG文件( /var/log/mysqld.log)中生成一个默认的临时密码
vim /var/log/mysqld.log A temporary password is generated for root@localhost: tKPR9)EaJifG #冒号后面为旧密码
登陆MySQL并修改root密码
mysql -uroot -p ALTER USER root@localhost IDENTIFIED BY 'Lk321@1024';
设置容许远程登陆
use mysql select user,host from user; update user set host = "%" where user = "root";
防火墙开启3306端口
firewall-cmd --zone=public --query-port=3306/tcp #查看是否开启3306 firewall-cmd --zone=public --add-port=3306/tcp --permanent #开启3306端口 systemctl restart firewalld #重启防火墙
出现2059这个错误的缘由是:
在mysql8以前的版本中加密规则为mysql_native_password,而在mysql8之后的加密规则为caching_sha2_password
#能够将mysql用户登陆的加密规则修改成mysql_native_password ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Lk321@1024';
Nginx 是一个免费的、开源的、高性能的 HTTP 和反向代理服务,主要负责负载一些访问量比较大的站点。
相比于 Apache,Nginx 能够处理更多的并发链接,并且每一个链接的内存占用的很是小。
Nginx 能够做为一个独立的 Web 服务,也能够用来给 Apache 或是其余的 Web 服务作反向代理。
在linux下,有的会用apache去跑php,而后用nginx作反向代理,好比apache运行在8080端口,nginx在80端口,访问php文件时,反向代理到apache,静态页经过nginx处理。
nginx支持高并发,apache对php的运行比较稳定。
安装 nginx 须要先将官网下载的源码进行编译,编译依赖 gcc 环境,若是没有 gcc 环境,则须要安装:
yum install -y gcc gcc-c++
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。
nginx 的 http 模块使用 pcre 来解析正则表达式,因此须要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也须要此库。
yum install -y pcre pcre-devel
zlib 库提供了不少种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,因此须要安装 zlib 库。
yum install -y zlib zlib-devel
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、经常使用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不只支持 http 协议,还支持 https(即在ssl协议上传输http),因此须要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel
下载
直接下载.tar.gz
安装包,地址:https://nginx.org/en/download.html
#下载Nginx到"/usr/local/src" cd /usr/local/src #使用wget命令下载。确保系统已经安装了wget,若是没有安装,执行 yum install wget 安装。 wget -c http://nginx.org/download/nginx-1.18.0.tar.gz
#解压安装包 tar -zxvf nginx-1.18.0.tar.gz #进入解压目录 cd nginx-1.18.0
configure配置nginx(配置包含:指定安装的位置、须要的模块功能)
使用默认配置
./configure
自定义配置(不推荐)
./configure \ --prefix=/usr/local/nginx \ --conf-path=/usr/local/nginx/conf/nginx.conf \ --pid-path=/usr/local/nginx/conf/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi
注:将临时文件目录指定为/var/temp/nginx,须要在/var下建立temp及nginx目录
编译&安装
make && make install
查找安装路径:
whereis nginx
注意:安装完成后,会有4个目录,
/usr/local/nginx/conf 配置文件/usr/local/nginx/html 网页文件,网站的根目录,就相似与apache里面的htdocs目录。
var/log/nginx 日志文件
/usr/local/nginx/sbin 主要二进制程序(启动程序命令)
若是nginx配置文件有修改,能够经过以下方式测试配置文件是否正确:/usr/local/nginx/sbin/nginx -t
查看Nginx编译时的参数
/usr/local/nginx/sbin/nginx -V
注意:
Nginx编译安装后没有办法经过systemctl指令来进行操做,由于它不是用rpm安装的,它里面没有服务,须要找到Nginx的执行文件才能启动
cd /usr/local/nginx/sbin/
启动、中止nginx
./nginx 启动
参数 "-c" 指定了配置文件的路径,若是不加 "-c" 参数,Nginx 会默认加载其安装目录的 conf 子目录中的 nginx.conf 文件。./nginx -s stop 此方式至关于先查出nginx进程id再使用kill命令强制杀掉进程。
./nginx -s quit 此方式中止步骤是待nginx进程处理任务完毕进行中止。
./nginx -s reload 不中止nginx的服务,从新加载配置文件
启动时报80端口被占用:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind()
查看80端口
netstat -lnp | grep 80
重启 nginx
1.先中止再启动(推荐):
对 nginx 进行重启至关于先中止再启动,即先执行中止命令再执行启动命令。
./nginx -s quit ./nginx
2.从新加载配置文件:
当 ngin x的配置文件 nginx.conf 修改后,要想让配置生效须要重启 nginx,使用-s reload
不用先中止 ngin x再启动 nginx 便可将配置信息在 nginx 中生效
./nginx -s reload
开机自启动
#即在`rc.local`增长启动代码就能够了。 vi /etc/rc.local #增长一行 `/usr/local/nginx/sbin/nginx` #设置执行权限: chmod 755 rc.local
配置nginx的systemctl命令
Systemd服务文件以.service结尾,若是用yum install命令安装的,yum命令会自动建立nginx.service文件。源码编译安装以后的nginx没法使用systemctl管理,要手动建立nginx.service服务文件
vim /usr/lib/systemd/system/nginx.service
一、配置nginx.service文件
[Unit] # 描述服务 Description=nginx-The High-performance HTTP Server # 描述服务类别 前置服务 After=network.target remote-fs.target nss-lookup.target [Service] # 后台运行的形式 Type=forking # PID文件的路径 PIDFile=/usr/local/nginx/conf/nginx.pid # 启动准备 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf # 启动命令 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 重启命令 ExecReload=/usr/local/nginx/sbin/nginx -s reload #中止命令 ExecStop=/usr/local/nginx/sbin/nginx -s stop # 快速中止 ExecQuit=/usr/local/nginx/sbin/nginx -s quit # 给服务分配临时空间 PrivateTmp=true [Install] # 服务用户的模式 WantedBy=multi-user.target
二、从新加载 systemd
systemctl daemon-reload
#查看nginx服务状态 systemctl status nginx.service #启动nginx服务 systemctl start nginx.service #中止nginx服务 systemctl stop nginx.service #重启nginx服务 systemctl restart nginx.service #从新读取nginx配置 systemctl reload nginx.service
在http段里面的server段就是配置虚拟主机的,http中每个server段就是一个虚拟主机
能够把多个虚拟主机配置成一个个单独的配置文件
cd /usr/local/nginx/conf mkdir vhosts
cd vhosts vim site1.com.conf server { listen 80; server_name site1.com; location / { root html/site1.com; index index.html; } }
include vhosts/*.conf
/usr/local/nginx/sbin/nginx -s reload
mkdir site1.com cd site1.com vim index.com
vim /etc/php-fpm.d/www.conf user = apache group = apache #修改成 user = nginx group = nginx
vim /usr/local/nginx/conf/vhosts/site1.com.conf #找到server项目设置以下内容 location ~ \.php$ { root html/site1.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
cd /usr/local/nginx/html/site1.com/ vim index.php
cd /usr/local/nginx/html composer create-project topthink/think=5.1.* site2.com
修改虚拟主机配置文件
cd /usr/local/nginx/conf/vhosts vim site2.com.conf server { listen 80; server_name site2.com; charset utf-8; root /usr/local/nginx/html/site2.com/public; location / { index index.php index.html; #若是请求既不是一个文件,也不是一个目录,则执行一下重写规则 if (!-e $request_filename) { #地址做为将参数rewrite到index.php上。 rewrite ^(.*)$ /index.php?s=/$1 last; } } location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #下面两句是给fastcgi权限,能够支持 ?s=/module/controller/action的url访问模式 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #下面两句才能真正支持 index.php/index/index/index的pathinfo模式 fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
重载Nginx
systemctl reload nginx