LNMP+discuz论坛nginx配置详细

0.准备

yum源:

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum makecache && yum clean all

如果 yum 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

centos7的scl源在2024年6月30日停止维护,其配置中默认使用了centos官方的地址,无法连接,需要替换为阿里云。

# 重命名原来的文件
cd /etc/yum.repos.d/
mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.bak
mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.bak
​
# 编辑文件
vim CentOS-SCLo-rh.repo
​
# 内容如下
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

安装包下载地址:

1.nginx

安装依赖包

yum -y install openssl openssl-devel make zlib zlib-devel gcc gcc-c++ libtool pcre pcre-devel

创建nginx用户

useradd -M -s /sbin/nologin nginx

安装nginx

#解压
tar nginx-1.26.1.tar.gz -C /opt/
​
cd /opt/nginx-1.26.1
​
#配置
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
​
#编译安装
make -j 2 && make install

创建命令的软连接,方便管理

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

创建服务

vim /usr/lib/systemd/system/nginx.service
​
# 内容如下:
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

刷新系统服务,启动nginx

systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
​
# firewall
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

网页访问

2.mysql

2.1 mysql8

安装依赖包

yum -y install ncurses ncurses-devel libaio-devel openssl libssl-dev libncurses-dev devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils

如果已安装cmake,并且版本低于 3.5.1,则需升级 (mysql8要求更高版本,否则报错如下)

解决:

# 如果已用yum安装过cmake,则先删除
# yum -y remove cmake
​
# 下载
# wget https://cmake.org/files/v3.30/cmake-3.30.0.tar.gz
​
# 解压
tar -xf cmake-3.30.0.tar.gz
​
# 配置、编译、安装
cd cmake-3.30.0/
./configure --prefix=/usr/local/cmake && make -j 2  && make install
​
# 软连接
ln -sv /usr/local/cmake/bin/cmake /usr/bin/
​
cmake --version

创建mysql用户、目录等

# 创建目录
mkdir /usr/local/mysql/
mkdir /usr/local/mysql/{data,log}
​
# 创建用户 
useradd -M -s /sbin/nologin  mysql
​
# 设置权限
chown -R mysql:mysql /usr/local/mysql/data
chmod -R 755 /usr/local/mysql/data

安装

cd /opt
​
# 解压
tar xf mysql-boost-8.1.0.tar.gz
​
# 切换目录
cd mysql-8.1.0/
mkdir build
cd build/
​
# 配置
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data/ -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306  -DWITH_BOOST=/opt/mysql-8.1.0/boost -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci   -DENABLED_LOCAL_INFILE=ON -DWITH_INNODB_MEMCACHED=ON  -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1  -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1
​
# 编译、安装
make -j 8 && make install

初始化数据库、配置等

# 初始化数据库
[root@localhost ~]# cd /usr/local/mysql/bin/
[root@localhost ~]# ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
 
# mysql配置文件 
[root@localhost ~]# vim /etc/my.cnf
​
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
 
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
socket = /usr/local/mysql/mysql.sock
 
# 配置MySQL环境变量 
[root@localhost ~]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@localhost ~]# source /etc/profile
 
# 配置系统启动mysql
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# chmod +x /etc/init.d/mysqld
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# netstat -anptu | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      30897/mysqld        
tcp6       0      0 :::33060                :::*                    LISTEN      30897/mysqld  
 
# 登录,设置密码
[root@localhost ~]# mysql -uroot
mysql> set password = '123456'           ##设置密码
mysql> exit
 
# 再次测试登录 
[root@localhost ~]# mysql -uroot -p
​
# 授予root远程登录权限
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;  
mysql>FLUSH PRIVILEGES; 
​

2.2 mysql5.7

安装依赖包

yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

创建用户

# 不创建数据库用户的目录,s指定权限
useradd -M -s /sbin/nologin  mysql

解压安装包

cd /opt
tar xf mysql-boost-5.7.20.tar.gz

配置

cd /opt/mysql-5.7.20/
​
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

编译、安装

make -j2 && make install

mysql 配置文件

vim /etc/my.cnf
​
# 内容如下
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
​
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
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
max_allowed_packet=16M
server-id = 1
​
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

更改目录和配置文件属性

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

环境变量

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile  
source /etc/profile

初始化数据库

cd /usr/local/mysql/bin/
​
# 执行
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

添加服务

# 拷贝服务文件
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
​
# 重新加载系统服务
systemctl daemon-reload
​
# 启动mysql
systemctl start mysqld.service
systemctl enable mysqld.service

mysql 的root用户密码

mysqladmin -u root -p password "123456"
​
#  直接回车

root用户远程登录权限

mysql -u root -p
​
# 查看是否创建成功数据库
mysql> show databases;
​
# 开启root远程登录权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;  
mysql> FLUSH PRIVILEGES;

firewall

firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --reload

3.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

解压、配置、编译、安装

# yum -y install bzip2
​
cd /opt
tar -xf 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
​
# 编译、安装
make -j2 && make install

软连接

ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/

验证安装的模块

php -m 

php配置文件

  • php用 ; 做注释

  • php有三个配置文件:

    • php.ini 主配置文件

    • php-fpm.conf 进程服务配置文件(进程配置打开)

    • www.conf 扩展配置文件(一般开发使用)

修改 php.ini

# 复制 php.ini
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini   
​
# 编辑
vim /usr/local/php/lib/php.ini
​
# 939行 修改时区
date.timezone = Asia/Shanghai
​
# 1170行 和mysql数据库进行网络通信
mysqli.default_socket = /usr/local/mysql/mysql.sock

修改 php-fpm.conf

# 复制 php-fpm.conf
cd /usr/local/php/etc/
cp  php-fpm.conf.default php-fpm.conf
​
# 编辑
vim php-fpm.conf
​
# 17行去掉 ; 注释,
pid = run/php-fpm.pid

www.conf

cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

启动 php-fpm

PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。

/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000

添加 php-fpm 系统服务

#添加service文件
cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
​
# 重启服务
systemctl restart php-fpm.service
systemctl enable php-fpm.service

nginx 支持 php 解析

# 修改主配置
vim /usr/local/nginx/conf/nginx.conf
​
# 65行--取消注释,修改
location ~ \.php$ {
    #指定默认路径/usr/local
    root           html;
    #解析的本地地址
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    #将 /scripts 修改为nginx的工作目录
    fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;  
    #$document_root 代表当前请求在root指令中指定的值
    #fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  
    include        fastcgi_params;
}

重启 nginx 服务

systemctl restart nginx.service

测试php页

vim /usr/local/nginx/html/index.php
​
# 以下内容
<?php
phpinfo();
?>

浏览器访问

4.测试php访问mysql

创建bbs数据库和用户

mysql -uroot -p
​
mysql> CREATE DATABASE bbs;
mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
mysql> GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';
mysql> flush privileges;

编写php

vim /usr/local/nginx/html/index.php
​
#替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.9.3','bbsuser','admin123');
if($link) echo "<h1>success</h1>";
else echo "fail";
?>

浏览器访问

5.部署 Discuz

解压、复制网站

# yum -y install unzip
​
cd /opt
unzip Discuz_X3.4_SC_UTF8.zip  -d /opt/dis
​
cd /opt/dis/dir_SC_UTF8/
​
# 给予静态页面访问地址
cp -r upload/ /usr/local/nginx/html/bbs/

文件权限

cd /usr/local/nginx/html/bbs
​
chmod -R 777 ./config/
chmod -R 777 ./data/
chmod -R 777 ./uc_client/
chmod -R 777 ./uc_server/

网页访问

http://192.168.9.3/bbs/install/index.php

安装完毕,网页访问

# 前端
http://192.168.9.3/bbs/index.php
​
# 后台
http://192.168.9.3/bbs/admin.php

6.其他

fpm参数优化

vim /usr/local/php/etc/php-fpm.conf 
​
pid = run/php-fpm.pid

FPM 启动时有 5 个进程,最小空闲 2 个进程,最大空闲 8 个进程,最多可以有20个进程存在。

vim /usr/local/php/etc/php-fpm.d/www.conf
​
# 96行 fpm进程启动方式,动态的
pm = dynamic                
# 107行 fpm进程启动的最大进程数
pm.max_children=20          
# 112行 动态方式下启动时默认开启的进程数,在最小和最大之间
pm.start_servers = 5        
# 117行 动态方式下最小空闲进程数
pm.min_spare_servers = 2    
# 122行 动态方式下最大空闲进程数
pm.max_spare_servers = 8    
# 重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`         
​
netstat -anpt | grep 9000
ps -elf | grep php-fpm

1.基本配置

vim /usr/local/nginx/conf/nginx.conf

最简配置如下

worker_processes  1;  
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
    server {
        listen       80; 
        server_name  localhost;        
        location / { 
            root   html;
            index  index.html index.htm;
        }   
    }   
}
  • worker_processes :启动nginx后,工作进程的数量,可以加大这个数字来提高nginx的处理请求的效率,但是这个数字也不能太大,因为进程是消耗系统内存资源的。调整一下这个数字,然后通过free指令可以査看一下内存容量的变化。建议和CPU核数一致。

  • worker_connections :连接数量,每个进程可以处理1024连接。

  • include mime.types :引入与配置文件同级目录的 mime.types,表示nginx能识别的各种文件的类型,如mp4、jpg等,如果能被识别,则在浏览器浏览时可以用默认的方式进行展示,否则会变为下载文件。

  • default_type application/octet-stream :如果有的文件类型不被识别,则以八进制文件流的方式处理。

  • charset utf-8 :网站统一编码。

  • server :虚拟主机,可以有多个。

  • location / :根目录配置

  • root html :网站的根目录,html是相对nginx安装目录 /usr/share/nginx 的,也可以使用绝对路径。

实验1.worker_processes

修改 worker_processes 为 2 后,重启nginx服务,查看进程

image-20240725001229126

实验2.网站根目录

image-20240725001847147

实验3.网站状态

image-20240725002427879

image-20240725002451307

2.server主机

2.1 基于端口

nginx配置

image-20240725002842893

网页访问

image-20240725003108402

2.2 基于IP

一张网卡配置两个ip测试即可

image-20240725003202516

image-20240725003251179

nginx配置

image-20240725004336423

网页访问

image-20240725004256441

2.3 基于域名

nginx配置

image-20240725004545948

修改 C:\Windows\System32\drivers\etc\hosts

image-20240725004755507

网页访问

image-20240725004718949

3.nginx优化

3.1 隐藏 nginx版本

在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。

隐藏版本前

修改配置

image-20240725152147131

隐藏版本后

image-20240725152051902

3.2 配置网页缓存

当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。

设置缓存前

image-20240725153059337

修改配置

image-20240725153744096

location ~* \.(gif|jpg|jepg|bmp|png|ico)$ {
    root /web/one;
    expires 1d;
}

解释

image-20240725154922824

设置缓存后

image-20240725153654062

3.3 设置连接超时

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置keepalive_timeout 超时时间。

修改配置

image-20240725172438193

keepalive_timeout 第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。可选的第二个参数指定了在响应头 Keep-Alive: timeout=time中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。

image-20240725172402860

3.4 日志切割

随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx 的运行状态,需要时刻关注 Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。

方法1.自定义脚本

编写脚本,把nginx日志移动到指定位置并以日期重命名,重新加载nginx配置生成新的日志,删除30天以前的日志

image-20240725163057775

#!/bin/bash
​
log_date=`date -d "-1 day" "+%Y%m%d"`
​
log_path="/var/log/nginx" 
​
pid="/usr/local/nginx/logs/nginx.pid"
​
[ -d $log_path ] || mkdir -p $log_path
​
mv /usr/local/nginx/logs/access.log $log_path/my.com-access.log-$log_date
​
kill -USR1 `cat $pid`
​
find $log_path -mtime +30 | xargs rm -rf 

利用cron定时任务,每天凌晨1:30分执行脚本

image-20240725163538322

方法2.logrotate

使用外部工具,如 logrotate 来管理日志切割。

以下是一个基本的 logrotate 配置示例,用于切割 Nginx 日志文件:

  • 安装 logrotate(大多数系统已预装)。

  • 创建一个 logrotate 配置文件,例如 /etc/logrotate.d/nginx,内容如下:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

解释:

  • daily:日志文件将每天轮换一次。

  • rotate 14:只保存最近14天的日志。

  • compress:用 gzip 压缩旧的日志文件。

  • postrotate:轮换后运行的命令,这里是向 Nginx 主进程发送 USR1 信号,让其重新打开日志文件。

logrotate 守护进程定期执行任务(通常每天一次)。确保 /etc/cron.daily/logrotate 脚本存在。

这样配置后,logrotate 会自动管理 Nginx 的日志文件,每天轮换并压缩旧日志,确保日志文件不会占用太多磁盘空间。

3.5 worker 进程数

见:1.基本配置 --- 实验1

worker_processes :启动nginx后,工作进程的数量,可以加大这个数字来提高nginx的处理请求的效率,但是这个数字也不能太大,因为进程是消耗系统内存资源的。调整一下这个数字,然后通过free指令可以査看一下内存容量的变化。建议和CPU核数一致。

3.6 fpm 参数优化

见:chapter04-源码编译构建LNMP/LNMP+discuz论坛.pdf --- 6.其他

vim /usr/local/php/etc/php-fpm.d/www.conf
# 96行fpm进程启动方式,动态的
pm = dynamic
# 107行fpm进程启动的最大进程数
pm.max_children=20
# 112行动态方式下启动时默认开启的进程数,在最小和最大之间
pm.start_servers = 5
# 117行动态方式下最小空闲进程数
pm.min_spare_servers = 2
# 122行动态方式下最大空闲进程数
pm.max_spare_servers = 8
#重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
netstat -anpt | grep 9000
ps -elf | grep php-fpm

3.7 网页压缩

Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许Nginx服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认 Nginx 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。

修改配置

image-20240725173825063

  • gzip on :开启 gzip 压缩输出

  • gzip_min_length1k :用于设置允许压缩的页面最小字节数

  • gzip_buffers 4 64k :表示申请 4 个单位为 64k 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果

  • gzip_http_version 1.0 :用于设置识别 http 协议版本,默认是1.1,目前大部分浏览器已经支持 gzip 解压,但处理较慢,也比较消耗服务器 CPU 资源

  • gzip_comp_level 2 :用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理速度最慢,使用默认即可

  • gzip_types text/plain :压缩类型,是对哪些网页文档启用压缩功能

  • gzip_vary on :选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面

当页面大于1k时,会进行压缩

image-20240725173736065

4. 防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。

再准备一台虚拟机(ip 192.168.9.5),安装web软件,测试盗链

image-20240725174701384

修改配置

image-20240725202844752

  • 注意1:把图片缓存的配置去掉

  • 注意1:需要配置 root 和 index,当然也可以把 location 中的 root 和 index 统一提到 server 节点

        location ~* \.(gif|jpg|png|jpeg)$ {
            root    /web/one;
            index   index.html index.htm;
            valid_referers  *.my.com my.com;
            if ($invalid_referer) {
                return 403;
            }   
        }

网页测试

image-20240725202639243

image-20240725202815611

5.include

自助建站服务基本情况是:公司提供服务器、公网ip、域名,然后用户在网站上注册账号,公司给用户分配子域名,帮助用户创建站点根目录,在nginx上配置虚拟主机,同时还会提供ftp服务,让用户自己可以上传网站代码。往往一个服务器上可能都能跑几百个网站,那么问题来了,每一个网站都需要在nginx主配置文件中添加一个server节点,那么nginx配置文件会变得很大,很难管理,所以要换一种方式来管理配置文件,将每个网站的配置都单独拆分出来。

修改主配置 /usr/local/nginx/conf/nginx.conf

image-20240726085722752

其中一个网站的独立配置 (注:一般域名、配置文件名、站点目录名都是同名的)

image-20240726085843824

网站根目录

image-20240726085955469

hosts文件

image-20240726091704950

此时的网站效果

image-20240726085630343

假如 one 网站的用户不再继续经营了,则可以把其配置文件改名让配置不再生效,如:one.my.com.conf.stop

此时重启服务后,再次访问 one.my.com,则会访问到 two.my.com

因为二级域名相同,nginx会默认打开成功加载了配置的后的第一个网站

image-20240726090241470

image-20240726090348815

根据这种情况,一般会定义此域名对应的默认网站,也就是官网,上面有用户注册、收费等等功能,可以使用 default_server 来指定默认网站

image-20240726090530763

image-20240726090648666

6.basic 认证

通过htpasswd生成认证信息,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问。

可以通过提供 htpasswd 的网站在线生成认证信息,也可以安装 httpd-tools 生成认证信息(见:05 Nginx网站服务.pdf)。

此处演示在线生成:htpasswd在线生成工具-在线htpasswd生成器-htpasswd在线工具

image-20240726091403756

假设 two 网站需要认证后才可进入

把刚才的认证信息保存到文件中,如:

image-20240726091751552

修改 two 网站的配置

image-20240726092116315

  • auth_basic :表示开启这个功能,"two.my.com"是备注信息,可以随便写,一些老浏览器能看到,新浏览器都看不到备注信息了。

  • auth_basic_user_file :指定认证信息所保存的文件

重启 nginx服务后,访问

image-20240726092044320

7.https 和 ssl

http属于明文传输数据,https是加密传输,也是现在的主流方式,需要ssl认证并进行相关配置。

  • 配置前提:安装 nginx时需要添加ssl模块 --with-http_ssl_module

  • ssl证书:可以在网站提供商处下载免费证书(如阿里云),也可以通过 openssl 生成(仅限实验)

从阿里云下载的证书如下,解压后有 key 和 pem 两个文件

image-20240725231239104

此处演示 openssl 生成过程

# 生成密钥
openssl genrsa -out my.com.key 1024
# 生成证书并签字
openssl req -new -key my.com.key -out my.com.csr
openssl x509 -req -days 365 -sha256 -in my.com.csr -signkey my.com.key -out my.com.crt

image-20240726095209135

image-20240726095234973

image-20240726095310480

此时生成的文件

image-20240726095347330

nginx配置文件说明

image-20240725231457416

修改配置

image-20240726102256710

listen    443 ssl;
​
ssl_certificate /usr/local/nginx/cert/my.com.crt;
ssl_certificate_key /usr/local/nginx/cert/my.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5";
ssl_prefer_server_ciphers on;

firewall允许https服务或放开443端口

image-20240726100548324

重启nginx服务,测试网站: https://www.my.com 或者 https://www.my.com:443

image-20240726102204340

如果此时访问 http://www.my.com 不会自动跳转 到 https,需要配置重定向

image-20240726102636582

# 只配置 rewrite 即可 ,root 和 index 可以不用配置
rewrite ^/(.*)$ https://www.my.com:443/$1 permanent;

重启nginx服务,测试网站

http://www.my.com/ 会自动跳转至 https://www.my.com/

8.rewrite 和 return

image-20240726105957404

image-20240726110325883

rewrite

image-20240726112432864

其他

image-20240726113024323

不带 www 也可以访问

image-20240726113359880

9.目录浏览

类似网站:Index of /files

image-20240726113847132

image-20240726113910005

注:设置了目录浏览功能的网站,不能有 index.html 页面

10.访问控制

image-20240726114628655

image-20240726114956920

image-20240726115327003

多个的话,也可以用网段 192.168.1.0/24

出现 403 forbidden 的可能:

image-20240726120132369

12.location和优先级

image-20240726120438294

image-20240726120551452

image-20240726120711549

image-20240726120810902

11.反向代理、负载均衡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值