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
安装包下载地址:
-
nginx:
-
mysql8(with boost):
-
php8
-
cmake:
-
libzip
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服务,查看进程
实验2.网站根目录
实验3.网站状态
2.server主机
2.1 基于端口
nginx配置
网页访问
2.2 基于IP
一张网卡配置两个ip测试即可
nginx配置
网页访问
2.3 基于域名
nginx配置
修改 C:\Windows\System32\drivers\etc\hosts
网页访问
3.nginx优化
3.1 隐藏 nginx版本
在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。
隐藏版本前
修改配置
隐藏版本后
3.2 配置网页缓存
当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
设置缓存前
修改配置
location ~* \.(gif|jpg|jepg|bmp|png|ico)$ { root /web/one; expires 1d; }
解释
设置缓存后
3.3 设置连接超时
在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置keepalive_timeout 超时时间。
修改配置
keepalive_timeout 第一个参数指定了与客户端的 keep-alive 连接超时时间,服务器将会在这个时间后关闭连接。可选的第二个参数指定了在响应头 Keep-Alive: timeout=time中的 time 值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。
3.4 日志切割
随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx 的运行状态,需要时刻关注 Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
方法1.自定义脚本
编写脚本,把nginx日志移动到指定位置并以日期重命名,重新加载nginx配置生成新的日志,删除30天以前的日志
#!/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分执行脚本
方法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 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。
修改配置
-
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时,会进行压缩
4. 防盗链
在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。
再准备一台虚拟机(ip 192.168.9.5),安装web软件,测试盗链
修改配置
-
注意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; } }
网页测试
5.include
自助建站服务基本情况是:公司提供服务器、公网ip、域名,然后用户在网站上注册账号,公司给用户分配子域名,帮助用户创建站点根目录,在nginx上配置虚拟主机,同时还会提供ftp服务,让用户自己可以上传网站代码。往往一个服务器上可能都能跑几百个网站,那么问题来了,每一个网站都需要在nginx主配置文件中添加一个server节点,那么nginx配置文件会变得很大,很难管理,所以要换一种方式来管理配置文件,将每个网站的配置都单独拆分出来。
修改主配置 /usr/local/nginx/conf/nginx.conf
其中一个网站的独立配置 (注:一般域名、配置文件名、站点目录名都是同名的)
网站根目录
hosts文件
此时的网站效果
假如 one 网站的用户不再继续经营了,则可以把其配置文件改名让配置不再生效,如:one.my.com.conf.stop
此时重启服务后,再次访问 one.my.com,则会访问到 two.my.com
因为二级域名相同,nginx会默认打开成功加载了配置的后的第一个网站
根据这种情况,一般会定义此域名对应的默认网站,也就是官网,上面有用户注册、收费等等功能,可以使用 default_server 来指定默认网站
6.basic 认证
通过htpasswd生成认证信息,可以实现基于用户授权的访问控制,当客户端想要访问相应网站或者目录时,要求用户输入用户名和密码才能正常访问。
可以通过提供 htpasswd 的网站在线生成认证信息,也可以安装 httpd-tools 生成认证信息(见:05 Nginx网站服务.pdf)。
此处演示在线生成:htpasswd在线生成工具-在线htpasswd生成器-htpasswd在线工具
假设 two 网站需要认证后才可进入
把刚才的认证信息保存到文件中,如:
修改 two 网站的配置
-
auth_basic :表示开启这个功能,"two.my.com"是备注信息,可以随便写,一些老浏览器能看到,新浏览器都看不到备注信息了。
-
auth_basic_user_file :指定认证信息所保存的文件
重启 nginx服务后,访问
7.https 和 ssl
http属于明文传输数据,https是加密传输,也是现在的主流方式,需要ssl认证并进行相关配置。
-
配置前提:安装 nginx时需要添加ssl模块 --with-http_ssl_module
-
ssl证书:可以在网站提供商处下载免费证书(如阿里云),也可以通过 openssl 生成(仅限实验)
从阿里云下载的证书如下,解压后有 key 和 pem 两个文件
此处演示 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
此时生成的文件
nginx配置文件说明
修改配置
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端口
重启nginx服务,测试网站: https://www.my.com 或者 https://www.my.com:443
如果此时访问 http://www.my.com 不会自动跳转 到 https,需要配置重定向
# 只配置 rewrite 即可 ,root 和 index 可以不用配置 rewrite ^/(.*)$ https://www.my.com:443/$1 permanent;
重启nginx服务,测试网站
http://www.my.com/ 会自动跳转至 https://www.my.com/
8.rewrite 和 return
rewrite
其他
不带 www 也可以访问
9.目录浏览
类似网站:Index of /files
注:设置了目录浏览功能的网站,不能有 index.html 页面
10.访问控制
多个的话,也可以用网段 192.168.1.0/24
出现 403 forbidden 的可能:
12.location和优先级
11.反向代理、负载均衡
略