Nginx網站服務LNMP搭建論壇

叨客金金發表於2020-12-01

Nginx

一款高效能、輕量級Web服務軟體
穩定性高
系統資源消耗低
對HTTP併發連線的處理能力高,單臺物理伺服器可支援30000-50000個併發請求

Nginx模組

核心模組:HTTP模組、EVENT模組和MAIL模組
基礎模組:HTTP Access模組、HTTP FastCGI模組、HTTP Proxy模組和HTTP Rewrite模組
第三方模組:HTTP Upstream Request Hash模組、Notice模組和HTTP Access Key模組

Nginx+FastCGI執行原理

FastCGI介面方式採用C/S結構,可以將HTTP伺服器和指令碼解析伺服器分開,同時在指令碼解析伺服器上啟動一個或者多個指令碼解析守護程式。當HTTP伺服器每.次遇到動態程式時,可以將其直接交付給FastCGI程式來執行,然後將得到的結果返回給瀏覽器。這種方式可以讓HTTP伺服器專一地處理靜態請求或者將動態指令碼伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的效能。

Nginx 不支援對外部程式的直接呼叫或者解析,所有的外部程式(包括 PHP)必須通過FastCGI 介面來呼叫。FastCGI 介面在 Linux 下是 socket(這個 socket 可以是檔案 socket, 也可以是 ip socket)。 wrapper 為了呼叫 CGI 程式,還需要一個 FastCGI 的 wrapper(wrapper 可以理解為用於啟動另一個程式的程式),這個 wrapper 繫結在某個固定 socket 上,如埠或者檔案 socket。當 Nginx 將 CGI 請求傳送給這個 socket 的時候,通過 FastCGI 介面,wrapper 接收到請求,然後 Fork(派生)出一個新的執行緒,這個執行緒呼叫直譯器或者外部程式處理指令碼並讀取返回資料;接著 wrapper 再將返回的資料通過 FastCGI 介面,沿著固定的 socket傳遞給 Nginx;最後 Nginx 將返回的資料(html 頁面或者圖片)傳送給客戶端。
在這裡插入圖片描述

Nginx部署過程

首先安裝依賴包準備生產環境

yum -y install \
 gcc \
 gcc-c++ \
 make \
 pcre-devel \
 zlib-devel

useradd -M -s /sbin/nologin nginx		##新增nginx使用者
tar zxvf nginx-1.12.2.tar.gz 
cd nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \		#指定安裝目錄
--user=nginx \						#指定程式使用者
--group=nginx \					#指定程式屬組
--with-http_stub_status_module			#將狀態模組啟用

make && make install		##編譯安裝
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
nginx -t		##配置檔案語法檢查
nginx    	##啟動服務
netstat -anpt | grep nginx
vi /etc/init.d/nginx         ##建立可執行指令碼

#!/bin/bash
# chkconfig: 35 90 20
# description: Nginx http server
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
        start)
                $PROG
                ;;
        stop)
                kill -s QUIT $(cat $PIDF)
                ;;
        restart)
                $0 stop
                $0 start
                ;;
        reload)
                kill -s HUP $(cat $PIDF)
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|reload}"
                exit 1
esac
exit 0

chmod +x /etc/init.d/nginx
chkconfig --add nginx

修改配置檔案

vi /usr/local/nginx/conf/nginx.conf
user nginx nginx;		#程式使用者
worker_processes  4;	#程式號
error_log logs/error.log info;		#開啟記錄錯誤日誌
pid        logs/nginx.pid;	#開啟程式指定程式檔案
http {
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;
##開啟記錄全域性訪問日誌(可不開,單獨開啟主機訪問日誌也可)
server {
charset utf-8;    #主機設定開啟支援utf-8編碼
access_log  logs/host.access.log  main;	#開啟主機訪問日誌
	   }
}

設定高併發可用

vi /usr/local/nginx/conf/nginx.conf
events{
		use epoll;				#開啟高併發
		worker_connections 4096;			#表示1個工作程式允許4096個連線,即高併發連線數
}

ulimit -n 		#檢視系統本地允許併發資源數
ulimit -n 65535 >> /etc/rc.local	#修改系統本地允許併發資源數

配置統計功能

vi /usr/local/nginx/conf/nginx.conf
##在server模組裡的error_page上面增加
location ~ /status {
		stub_status on;
		access_log off;
}

在這裡插入圖片描述
在這裡插入圖片描述

配置驗證功能

yum -y install httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zjj		生成驗證檔案
互動輸入密碼
chmod 400 /usr/local/nginx/passwd.db
chown nginx /usr/local/nginx/passwd.db
vi /usr/local/nginx/conf/nginx.conf
location / {
		root html;
		index index.html index.htm;
			auth_basic "secret";
			auth_basic_user_file /usr/local/nginx/passwd.db
}

在這裡插入圖片描述

限制訪問

按序匹配,匹配到不再繼續往下匹配。

vi /usr/local/nginx/conf/nginx.conf

location / {
		root html;
		index index.html index.htm;
			deny  192.168.10.1;
			allow all;
			auth_basic "secret";
			auth_basic_user_file /usr/local/nginx/passwd.db
}

在這裡插入圖片描述

Nginx虛擬主機

基於域名

vi /usr/local/nginx/conf/nginx.conf 

server {
				listen	80;
				server_name  www.ab.com;
				charset utf-8;
				access_log	logs/ab.access.log	main;
				location  /  {
					root	/var/www/ab;
					index	index.html	index.htm;
					error_page	500 502 503 504		/50x.html;
				}
				location = /50x.html	{
					root	html;
				}
}

nginx -t
systemctl stop nginx
systemctl start nginx

建立網頁檔案

[root@server1 ~]# mkdir -p /var/www/aa
[root@server1 ~]# mkdir -p /var/www/ab
[root@server1 ~]# echo "<h1>this is aa.</h1>" > /var/www/aa/index.html
[root@server1 ~]# echo "<h1>this is ab.</h1>" > /var/www/ab/index.html
[root@server1 ~]# vi /etc/hosts
新增
192.168.10.13   www.aa.com www.ab.com

驗證結果在這裡插入圖片描述

基於IP

ifconfig ens33:1 192.168.99.99/24		##建立虛擬網路卡
vi /usr/local/nginx/conf/nginx.conf

server {
		listen  192.168.99.99:80;
		server_name www.ab.com;
		charset utf-8.......
}
		
nginx -t
systemctl stop nginx
systemctl start nginx
netstat -anpt | grep nginx

基於埠

vi /etc/nginx.conf 

server {
		listen  192.168.99.99:8080;
		server_name www.ab.com;
		charset utf-8.......
}

nginx -t
systemctl stop nginx
systemctl start nginx
netstat -anpt | grep nginx

安裝MySQL

參考《構建LAMP架構》

安裝PHP

yum -y install libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

libjpeg libjpeg-devel :jpeg影像壓縮庫
libpng libpng-devel :png影像壓縮庫
freetype freetype-devel :字型引擎
libxml2 libxml2-devel :解析Xml程式庫
zlib zlib-devel :資料壓縮
curl curl-devel :傳輸工具
openssl openssl-devel :安全通訊

tar jvxf php-7.1.10.tar.bz2
cd php-7.1.10/
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

引數詳解

./configure --prefix=/usr/local/php  :          安裝路徑
 --with-mysql-sock=/usr/local/mysql/mysql.sock :套接字路徑
--with-mysqli :    呼叫mysql儲存過程
 --with-zlib :     開啟zlib函式庫
--with-curl  :     呼叫curl規則
 --with-gd :       影像處理
--with-jpeg-dir :  支援jpeg格式
--with-png-dir :   支援png格式
--with-freetype-dir :開啟字型引擎
--with-openssl :   開啟ssl套接字功能
--enable-fpm :     載入fpm模組
--enable-mbstring  支援utf-8功能
--enable-xml :     支援xml檔案格式
--enable-session : 開啟會話
--enable-ftp :     開啟ftp擴充套件
--enable-pdo :     訪問介面
--enable-tokenizer:分詞器 
--enable-zip:      對zip檔案支援
make && make install		##編譯安裝
cd php-7.1.10/
php-7.1.10]# ls -lh
cp php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini   
新增
mysqli.default_socket = /usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai

/usr/local/php/bin/php -m | wc -l

配置及優化FPM模組

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
cd /usr/local/php/etc/
vi php-fpm.conf		#手動新增開啟fpm程式

pid = run/php-fpm.pid

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000	#確認fpm開啟,埠號為9000
ln -s /usr/local/php/bin/* /usr/local/bin/
ps aux | grep -c "php-fpm"

在這裡插入圖片描述

vi /usr/local/nginx/conf/nginx.conf
##在server模組裡開啟php主頁
location ~ \.php$ {
	root	html;
	fastcgi_pass	127.0.0.1:9000;
	fastcgi_index	index.php;
	fastcgi_param	SCRIPT_FILENAME $document_root$fastcgi_script_name;
	include	fastcgi_params;
}

nginx -t
systemctl stop nginx
systemctl start nginx

建立php主頁進行驗證

vi /usr/local/nginx/html/index.php

<?php
phpinfo();
?>

在瀏覽器上訪問http://192.168.10.13/index.php

在這裡插入圖片描述

測試php能否呼叫mysql

登入MySQL進行配置

mysql -uroot -p123456
mysql> create database bbs;  建立資料庫
mysql> grant all privileges on bbs.* to 'bbsuser'@'localhost' identified by 'admin123';    本地授權
mysql> grant all privileges on bbs.* to 'bbsuser'@'%' identified by 'admin123';       遠端授權
mysql> flush privileges;    重新整理
mysql> exit

配置php網頁

[root@server1 ~]# vi /usr/local/nginx/html/index.php

<?php 變數  連線資訊   本機地址 資料庫登入名    登入密碼
$link=mysqli_connect ('192.168.10.13','bbsuser','admin123');
if($link) echo "<h1>Success!</h1>";
else echo "Fail!!";
?>

瀏覽器訪問http://192.168.10.13/index.php
在這裡插入圖片描述
即呼叫成功

搭建Discuz社群論壇

unzip Discuz_X3.4_SC_UTF8.zip		##解壓軟體包
cd dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs

chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/
chown -R 777 ./config/
chown -R 777 ./data/
chown -R 777 ./uc_client/
chown -R 777 ./uc_server/

瀏覽器開啟http://192.168.10.13/index.php進行安裝
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

將目錄設為僅自己可見

cd /usr/local/nginx/html/bbs/
mv install/ install.lock
chmod 600 install.lock/

相關文章