1、全局模塊
worker_processes 1;
工作進程數,一般設置成服務器內核數的2倍(一般不超過8個,超過8個反而會降低性能,一般是4個,1-2個也可以)
處理進程的過程必然涉及配置文件和展示頁面,也就是涉及打開文件的數量
linux默認打開的文件數是1024個
修改最大文件數 /etc/security/limits.conf
?alias和root之間匹配工作目錄的區別:
root的匹配模式是拼接
root的工作目錄/opt/test1,訪問的uri /xy102
location /xy102
工作目錄/opt/test1
訪問的是/opt/test1/xy102
alias匹配nginx的工作目錄,路徑是絕對路徑
location /xy102
alias /opt/test1/xy102/;
alias只能寫在http模塊當中server模塊的location模塊當中
root可以寫在server模塊,也可以在http,也可以在location
使用alias匹配工作目錄不能夠使用重定向功能
2、events模塊
events {
? ? ? ? workers_connections 1024;
}
決定了nginx能夠處理的連接數,連接數和worker_processes的數值相乘
3、stream四層代理模塊
4、http模塊
轉發和處理http請求,設置代理(正向代理,反向代理),緩存,定義日志格式,重定向配置?
在http模塊當中,包含:
server模塊,http里面可以有多個server模塊
在server模塊當中包含:location模塊
在server當中可以有多個location
5、實驗
5.1統計訪問狀態
修改配置文件
?各行的含義:
Active connections 當前活動的連接數
server accepts handled requests 表示已經處理的連接數
2 2 21
從左往右表示已經處理的連接數,成功建立連接的次數,已經處理的請求數
Reading:0 writing:1 waiting:1
reading:表示服務端正在從客戶端讀取請求的數據
writing:表示服務端正在把響應數據發送給客戶端
waiting:表示有連接處于空閑狀態,等待新的請求
5.2基于密碼的授權進行訪問控制
先安裝httpd-tools,htpasswd的工具
?生成一個passwd.db的文件,用戶abc可以對這個文件進行處理,設置密碼為123
?將passwd.db的所有者改為nginx,并修改權限為400
?修改配置文件
?加密用戶才可以訪問
5.3基于客戶端的訪問控制
根據ip地址進行控制
拒絕192.168.233.62訪問,允許其他所有訪問
5.4基于域名的nginx的主機
修改配置文件
?vim /etc/hosts做一個本地映射
?訪問成功
多個server,修改配置文件
?
?本地映射
訪問成功
5.5基于ip地址的虛擬主機
創建虛擬網卡
?更改監聽地址
?訪問成功
5.6基于端口實現多個虛擬主機
更改端口號(范圍1-65535)
訪問8080端口
?訪問8888端口
5.7多個配置文件
進入配置文件,添加一個include
?創建conf.d目錄
mkdir conf.d
?創建新的文件test1.conf,添加server作為獨立的配置文件
?創建目錄test1、test2
[root@localhost opt]# mkdir -p conf/test1
[root@localhost opt]# mkdir -p conf/test2
?分別在test1、test2輸入內容
[root@localhost conf]# echo "this is test1" > test1/index.html
[root@localhost conf]# echo "this is test2" > test2/index.html
?訪問成功
6、nginx的優化與防盜鏈
6.1隱藏版本號
vim nginx.conf
無版本號
6.2修改用戶與組 ?
6.3設置頁面的緩存時間,主要是針對動態頁面
設置圖片的緩存
6.4日志分割
apache是自帶日志分割的,按天來進行收集日志
apache的日志access.log error.log
nginx沒有自動分割的功能,借助腳本來實現分割
6.5更改進程數以及設置cpu綁定
6.6連接超時
?
6.7配置頁面壓縮
gzip on
gzip_min_length 1k;
#最小的壓縮文件,小于等于1k的文件就不壓縮了
gzip_buffers 4 64k;
#設置壓縮的緩沖區,4個,每個緩沖區的大小為64k
gzip_comp_level 6;
#壓縮比例為1-9,數字越小,壓縮的比例越小,速度越快;數字越大,壓縮的比例就越高,速度越慢gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
#支持壓縮的類型
6.8回收TIME_WAIT
time_wait是tcp連接當做的一種狀態,出現在四次揮手之后,處于等待狀態,雙方不再發送數據
time_wait所占用的系統資源很小,數量比較少,完全可以忽略不計,但是太多了就有一定的影響。
連接斷開(四次揮手)之后,盡快的把time_wait狀態的連接進行回收
netstat -n | awk '/^tcp/ {++s[$NF]} END {for (a in s) print a s[a]}
#統計當前系統的連接狀態
?修改內核文件
?sysctl -p? ?
#立即生效
6.9防盜鏈
?vim index.html
echo "192.168.230.10 www.xy102.com" >> /etc/hosts
echo "192.168.230.20 www.xy103.com" >> /etc/hosts
7、lnmp+DIS架構
是論壇的一個服務
l:linux 操作系統
n:nginx 前端頁面的web服務
php:動態請求轉發的中間件
m:mysql 數據庫,保存用戶和密碼以及論壇的相關內容
7.1安裝數據庫
將mysql的包拖進去,并且解壓
?將包改名為mysql,移動到/usr/local
?創建mysql的程序用戶
[root@localhost opt]# useradd -M -s /sbin/nologin mysql
修改所有者和所在組
[root@localhost opt]# chown -R mysql.mysql /usr/local/mysql
修改mysql主配置文件的所有者和所在組
[root@localhost opt]# chown mysql.mysql /etc/my.cnf
?修改主配置文件
vim /etc/my.cnf
?port = 3306
[client]
port = 3306
#客戶端訪問的端口
socket=/usr/local/mysql/mysql.sock
#指定mysql的通信套接字文件[mysqld]
#mysql的安裝目錄
datadir=/usr/local/mysql/data
#mysql數據保存的目錄
port = 3306
character-set-server=utf8
#字符集的編碼
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
#任意地址都可以訪問數據庫
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
#mysql默認的存儲引擎
max_allowed_packet=16M
server-id = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#mysql支持的數據類型和相關的模塊
?將文件放到/etc/profile里,讓系統可以識別
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
?source /etc/profile
?初始化數據庫
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
?將文件復制到mysqld
?給一個執行權限
chmod +x /etc/init.d/mysqld
?讀取配置文件,重啟mysqld
systemctl daemon-reload
systemctl restart mysqld
?查看是否有3306這個端口
?初始化數據庫的密碼
數據庫安裝完畢
?
?在數據庫中創建用戶
mysql> create user 'root'@"%" identified by '123456';
Query OK, 0 rows affected (0.01 sec)
?賦權
mysql> grant all privileges on *.* to 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
?刷新權限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
?navicat遠程登錄,修改加密方式,刷新
mysql> alter user 'root'@'%' identified with mysql_native_password by "123456";
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
安裝php的依賴環境
?yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
oniguruma-devel \
sqlite-devel
將php的安裝包拖進來并解壓
編譯安裝,開始配置
?./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-pdo-mysql \
--with-openssl \
--with-sqlite-devel \
--with-oniguruma-devel \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
?配置成功
安裝
?make -j 4 && make install
?安裝完成
?優化兩個線路,讓系統識別到
[root@nginx1 php-8.1.27]# ln -s /usr/local/php/bin/* /usr/local/bin/
[root@nginx1 php-8.1.27]# ln -s /usr/local/php/sbin/* /usr/local/sbin/
?將主配置文件php.ini-development復制到/usr/local/php/lib,改名為php.ini
cp php.ini-development /usr/local/php/lib/php.ini
?打開/usr/local/php/lib/php.ini,修改976和1181行的內容
修改進程服務的配置文件
復制php-fpm.conf.default
?打開php-fpm.conf,取消17行的注釋
調整擴展配置文件
復制www.conf.default
啟動php
/usr/local/php/sbin/php-fpm -c
/usr/local/php/lib/php.ini
?查看端口號
?添加系統配置
?配置nginx的動態轉發
?
?<?php
phpinfo();
?>
?瀏覽器訪問成功
?進入數據庫,創建專門用來保存論壇信息的用戶和庫
mysql -u root -p123456
?創建庫,名為bbs
create database bbs;
?
?創建用戶bbsuser,任意地址都可以連接,密碼為admin123
create user 'bbsuser'@'%' identified by 'admin123'
賦權,刷新
?mysql> grant all privileges on bbs.* to 'bbsuser'@'%';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
?創建本地連接用戶
create user 'bbsuser'@'localhost' identified by 'admin123';
?賦權,刷新
mysql> grant all privileges on bbs.* to 'bbsuser'@'localhost';
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
指定用戶登錄
?連接數據庫成功
7.2安裝discuz論壇
將discuz安裝包拖進去,解壓
unzip Discuz_X3.5_SC_UTF8.zip -d /opt/dis
?復制upload
?修改所有者所在組和權限
[root@localhost html]# chown -R nginx.nginx bbs/
[root@localhost html]# chmod -R 777 bbs/
?開始訪問
安裝成功
?論壇搭建成功
?