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