nginx相关内容

是什么

Nginx (engine x) 是一款轻量级的 Web 服务器反向代理服务器及电子邮件(IMAP/POP3)代理服务器.

nginx.org 官网

nginx.com 收费网站

nginx安装脚本1

 #!/usr/bin/env bash
 ​
 ###################################################################################
 # 控制台颜色
 BLACK="\033[1;30m"
 RED="\033[1;31m"
 GREEN="\033[1;32m"
 YELLOW="\033[1;33m"
 BLUE="\033[1;34m"
 PURPLE="\033[1;35m"
 CYAN="\033[1;36m"
 RESET="$(tput sgr0)"
 ###################################################################################
 ​
 printf "${BLUE}\n"
 cat << EOF
 ###################################################################################
 # 采用编译方式安装 Nginx, 并将其注册为 systemd 服务
 # 默认下载安装 1.16.0 版本,安装路径为:/usr/local/nginx
 # @system: 适用于 CentOS7+
 ###################################################################################
 EOF
 printf "${RESET}\n"
 ​
 command -v yum > /dev/null 2>&1 || {
     printf "${RED}Require yum but it's not installed.${RESET}\n";
     exit 1;
 }
 ​
 printf "\n${GREEN}>>>>>>>> install nginx begin${RESET}\n"
 ​
 if [[ $# -lt 1 ]] || [[ $# -lt 2 ]]; then
     printf "${PURPLE}[Hint]\n"
     printf "\t Usage: sh nginx-install.sh [version] \n"
     printf "\t Default: sh nginx-install.sh 1.16.0 \n"
     printf "\t Example: sh nginx-install.sh 1.16.0 \n"
     printf "${RESET}\n"
 fi
 ​
 temp=/opt/nginx
 version=1.16.0
 if [[ -n $1 ]]; then
     version=$1
 fi
 ​
 # install info
 printf "${PURPLE}[Install Info]\n"
 printf "\t version = ${version}\n"
 printf "${RESET}\n"
 ​
 printf "${CYAN}>>>> install required libs${RESET}\n"
 yum install -y zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre
 ​
 # download and decompression
 printf "${CYAN}>>>> download nginx${RESET}\n"
 mkdir -p ${temp}
 curl -o ${temp}/nginx-${version}.tar.gz http://nginx.org/download/nginx-${version}.tar.gz
 tar zxf ${temp}/nginx-${version}.tar.gz -C ${temp}
 ​
 # configure and makefile
 printf "${CYAN}>>>> compile nginx${RESET}\n"
 cd ${temp}/nginx-${version}
 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
 make && make install
 rm -rf ${temp}
 cd -
 ​
 # setting systemd service
 printf "${CYAN}>>>> set nginx as a systemd service${RESET}\n"
 wget -N https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/config/nginx/nginx.service -O /usr/lib/systemd/system/nginx.service
 chmod +x /usr/lib/systemd/system/nginx.service
 ​
 # boot nginx
 printf "${CYAN}>>>> start nginx${RESET}\n"
 systemctl enable nginx.service
 systemctl start nginx.service
 ​
 printf "\n${GREEN}<<<<<<<< install nginx end${RESET}\n"
 printf "\n${PURPLE}nginx service status: ${RESET}\n"
 systemctl status nginx
脚本2

#!/bin/bash

# 0.准备工作

# . init.sh

ch_ok(){

   if [ $? -eq 0 ]

   then

       echo -e "$1执行\033[32m成功!\033[0m"

   else

       echo -e "$1执行\033[31m失败!\033[0m"

       exit 1

   fi

}

install_nginx(){

# 1.安装依赖

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

ch_ok "安装依赖"

# 2.下载软件包

if [ -f nginx-1.25.4.tar.gz ]

then

    echo  "nginx-1.25.4.tar.gz已存在"

else

    wget https://mirrors.huaweicloud.com/nginx/nginx-1.25.4.tar.gz

fi

ch_ok "下载软件包"

# 3.解压缩复制到/usr/local/src

if [ -d /usr/local/src/nginx-1.25.4 ]

then

    echo "nginx目录已存在! "

else

   tar -xvf nginx-1.25.4.tar.gz -C /usr/local/src

   ch_ok "解压缩"

fi

# 4.编译安装

if [ -f /usr/local/nginx/sbin/nginx ]

then

   echo "已安装nginx,不需要重新安装!"

else

        cd /usr/local/src/nginx-1.25.4

        ./configure --with-http_stub_status_module --with-http_ssl_module

        make -j 2 && make install

        ch_ok "编译"

fi

# 5.修改配置

if [ -f  /usr/lib/systemd/system/nginx.service ]

then

   echo "启动脚本已存在!"

else

    cat > /usr/lib/systemd/system/nginx.service << EOF

[Unit]

Description=The NGINX HTTP and reverse proxy server

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/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=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

EOF

fi

ch_ok "配置启动项"

# 6.启动

systemctl daemon-reload

systemctl enable nginx

systemctl start nginx

}

install_nginx

1.目前主流的web服务器:

1.Apache(LAMP)

【同步阻塞模型,多线程,一个线程对应一个请求,并发量过高时,性能会变差】

2.Nginx(速度快,高并发,静态网站服务性能高;优秀的反向代理,负载均衡)

【异步非阻塞,多进程+多线程,

3.IIS

4.tomcat(针对java项目,web服务器,动态网站)

延伸版本:tengine(淘宝)、openresrt(章亦春)等

2.反向代理:将局域网、内部的WEB服务中的数据进行代理转发,让用户可以看到;

image-20240327153325740

正向代理:代理用户的请求,简介访问网络服务

nginx特点

nginx特点

  • 模块化设计:良好的扩展性,可以通过模块方式进行功能扩展。

  • 高可靠性:主控进程和 worker 是同步实现的,一个 worker 出现问题,会立刻启动另一个 worker。

  • 内存消耗低:一万个长连接(keep-alive),仅消耗 2.5MB 内存。

  • 支持热部署:不用停止服务器,实现更新配置文件,更换日志文件、更新服务器程序版本。

  • 并发能力强:官方数据每秒支持 5 万并发;

  • 功能丰富:优秀的反向代理功能和灵活的负载均衡策略

Nginx 功能

  • 支持静态资源的 web 服务器。

  • http,smtp,pop3 协议的反向代理服务器、缓存、负载均衡;

  • 支持 FASTCGI(fpm)

  • 支持模块化,过滤器(让文本可以实现压缩,节约带宽),ssl 及图像大小调整。

  • 内置的健康检查功能

  • 基于名称和 ip 的虚拟主机

  • 定制访问日志

  • 支持平滑升级

  • 支持 KEEPALIVE

  • 支持 url rewrite

  • 支持路径别名

  • 支持基于 IP 和用户名的访问控制。

  • 支持传输速率限制,支持并发数限制。

一、http与https的区别

https=http+ssl (加密 HTTPS还支持身份认证,通过数字证书确保网站的真实性。)

虚拟主机

就是把一台物理服务器划分成多个“虚拟”的服务器,每一个虚拟主机都可以有独立的域名和独立的目录,可以独立发布一个网站。

一个web服务器可以部署多个网站(能节约资源)

端口(适用于公司内部,因为端口你是无法告诉公网用户的):

  • 80

  • 443

  • 8080

  • 8081

    mkdir -p /data/test{1..3}

    image-20240328143423206

![image-20240328143240973](C:\Users\联想小新\Desktop\vx图片\image-20240328143240973.png

image-20240329092625819

image-20240329092706814

image-20240329105555625

image-20240329093729951

image-20240329093644993

image-20240329093702988

域名(目前公网发布网站的首选,一个网站需要一个域名;一级域名需要购买【zuolaoshi】,二级域名【www】可以自己设置):

修改配置文件里面的 域名;然后 去自己真机上面打开此电脑—c盘\Windows\system32\drivers\etc\hosts里面 添加 IP 和域名;例如:192.168.8.11 www.baidu.com

ip:

多个网卡,每个网卡设置不同的IP地址。

通过增加网络适配器,来增加ip;

三、安装方式(nginx)

进程/线程


1程序(至少包含)——1个进程(可以看到)—-(至少包含)1线程(看不到)

IO模型


IO input/output 输入/输出操作

文件IO 读文件、写文件

网络IO 请求、相应

epoll 是多路复用 IO(I/O Multiplexing) 异步非阻塞模型

select 模型 Apache使用的,同步阻塞模型

主进程:检测配置文件,管理工作进程。

在关闭Nginx时,主进程会检测所有工作进程是否被使用,在没有连接时,才会被结束。

主进程:检测配置文件,管理工作进程;

在关闭nginx时,主进程会检测所有工作进程是否被使用;在没有来凝结时,才会被结束;

配置文件详解

/usr/local/nginx/conf

vim nginx.conf

开启的进程数

worker_processes 1;

events { worker_connections 1024; }

http {

Include包含,将子配置文件引入到主配置文件中,在nginx启动时生效;

mime.types 文件类型—-文件后缀对照表,告诉浏览器以哪种方式打开;

include mime.types;

当文件类型不在mime.types中使用 默认类型,数据流格式;

default_type application/octet-stream;

高效文件传输;默认开启

sendfile on;

单位是秒,客户端连接时时间,超时之后服务器端自动关闭该连接 如果 nginx 守护进程在这个等待的时间里,一直没有收到浏览发过来 http 请求,则关闭这个 http 连接;

高可用:一个进程中断,立刻开启新的进程替补

keepalive_timeout 65;

虚拟主机–网站(后台服务)

 server {
 #监听的端口和主机
 listen       80;
 server_name  localhost;

 #域名(DNS)和主机名
 #同一个主机名可以有多个域名
 #通过不同域名访问不同的服务;
 server_name  localhost; 
 ​
 error_page   500 502 503 504  /50x.html;
 location  / {
 #建议使用绝对路径,相对路径时相对于Nginx的安装目录;
    root   html;
 #默认访问的静态页面;
 index  index.php index.html  index.htm;
 }
 ​
 error_page   500 502 503 504  /50x.html;
    location =/50x.html {
        root   html;
 ​
    }

web服务器状态码

200 成功

3xx 重定向

4xx 本地错误 404 网页丢失[输入错误,找不到要查询的页面]

403没有访问权限

5xx 服务器错误 502(数据库连接问题,内部网络故障或设置问题)

freessl 创建免费的ssl证书;

免费申请域名

http/https

HTTPS(全称:HyperText Transfer Protocol Secure)是HTTP(超文本传输协议)的安全版本。本质上,HTTPS在HTTP的基础上,通过SSL/TLS协议提供了数据加密、完整性保护和身份验证,以确保网络数据传输的安全性。HTTPS被广泛用于互联网上的安全通信,特别是在线交易和处理敏感信息时,本文以Nginx为例部署自签发https证书。

HTTPS的工作原理

HTTPS的工作原理

1.客户端发起HTTPS请求 用户在浏览器中输入网址。连接到服务器的443端口 2.服务端的配置 采用HTTPS的服务器需要由一套数字证书,可以自己制作,也可以向组织申请。 这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。 3.传输证书 这个证书其实就是公钥,里面包含了很多例如证书颁发机构 4.客户端解析证书 先确定证书是否有问题,如果证书有效那么就会生成一个随机值,然后用证书对这个随机值加密,把随机值用锁头锁起来,这样除非有钥匙,否则看不到被锁住的内容。 5.传送加密信息 这部分传送的是用于证书加密的随机值,让服务端得到这个随机值,这样的话服务端和客户端就能依靠这个随机值来进行加密解密了。 6.服务端解密信息 服务端用私钥解密之后,得到了客户端传过来的随机值(私钥),然后把内容通过这个值进行对称加密,也就是将信息和私钥混合在一起进行算法加密,只有知道私钥才能获取到相应内容,这样就能保证数据足够的安全。 7.传输加密后的信息 这部分信息是服务端用私钥加密后的信息,在客户端可以被还原 8.客户端解密信息 客户端用私钥解密服务端传送过来的信息,这样保证了即使信息被截取,第三方也将束手无策。

image-20240328145328632

CA证书签发机构

CA(Certificate Authority,证书授权)是由认证机构服务者签发,是数字签名的技术基础保障,也是网上实体身份的证明,能够证明某一实体的身份及其公钥合法性,证明该实体与公钥二者之间的匹配关系。 [2]

证书是公钥的载体,证书上的公钥与实体身份相绑定。现,一个是签名证书行的PKI机制一般为双证书机制,即一个实体应具有两个证书、两个密钥对,其中一个是加密证书,一个是签名证书,而加密证书原则上是不能用于签名的。

电子商务系统中,所有实体的证书都是由证书授权中心CA中心颁发并签名的。一个完整的、安全的电子商务系统必须建立一个完整的、合理的CA体系。CA体系由证书审批部门和证书操作部门组成。 [2

生成证书

  • .key: RSA私钥(Private Key),用于加密和解密数据。

  • .csr: 证书签名请求(Certificate Signing Request),包含了证书申请者的公钥和相关信息,用于向证书颁发机构(CA)请求签发证书。

  • .crt: 自签名证书(Self-signed Certificate),由私钥持有者自行签名的证书,用于证明公钥的真实性。在这种情况下,私钥持有者也是证书颁发机构。

  • .pem: Diffie-Hellman参数,用于支持TLS协商过程中的密钥交换,确保通信的机密性和安全性。

image-20240328153823539

实验操作步骤:

 cd   /usr/local/nginx
 ​
 mkdir   ssl
 # 2.创建本地私有密钥
 ​
 openssl genrsa -out ssl.key 2048
 ​
 # 3.按提示输入即可
 ​
 openssl req -new -key ssl.key -out ssl.csr
 ​
 # 4.创建证书crt
 ​
 openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt
 ​
 # 5.创建证书pem
 ​
 openssl dhparam -out ssl.pem 2048
 ​
 #把下载的文件传输到桌面
 sz  ssl.crt
 (若sz不能用,可以先安装lrzsz)
 ​
 ​
 #接下来修改配置文件
 cd /usr/local/nginx/conf
  vim nginx.conf
  第一处:
  server {
     listen       80;
     return 301 https://$host$request_uri;
 }
 #在server这里添加这一行内容:
 return 301 https://$host$request_uri;
 ​
 第二处:
 在server  location里面添加:
 ​
 server {
     listen 443   ssl;
     ssl_certificate                          /usr/local/nginx/ssl/ssl.crt;
     ssl_certificate_key                        /usr/local/nginx/ssl/ssl.key;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1.2;
     ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
 }
 ​

实验效果:

image-20240328171451884

image-20240328171515719

image-20240328193747246

nginx 上如何部署https

1.获取有效的SSL/TLS证书

2.购买证书:你可以从许多证书颁发机构(CA)购买SSL/TLS证书,例如VeriSign、Comodo、Let's Encrypt等。这些证书的价格和类型(如域名验证DV、组织验证OV、扩展验证EV)不同,适用于不同的需求和预算。 - 免费证书:Let's Encrypt提供了免费的SSL/TLS证书,适用于大多数基本需求,并且支持自动续签。这使得HTTPS更容易为各种网站所采纳。

3.在服务器上配置SSL/TLS证书

SSL证书:安全套接字层证书,用于互联网上保护数据传输的安全

4.证书的安装和配置过程会根据你的服务器软件(如Apache、Nginx、IIS等)而异。通常,你需要将获取的证书(通常是一个.crt文件)和私钥(一个.key文件)安装到服务器上,并且可能需要安装证书颁发机构的中间证书。 - 配置过程中,你需要修改服务器的配置文件,指定证书文件和私钥文件的位置,并且可能需要指定使用的加密套件和协议版本等安全设置。

5.确保网站资源通过HTTPS加载

6.确保网站上所有的资源(如图片、脚本、样式表等)都通过HTTPS而非HTTP加载,避免“混合内容”问题,这可能会导致浏览器安全警告。 - 对于外部资源,确保链接使用HTTPS,或者考虑将它们托管在你自己的服务器上。

7.重定向HTTP请求到HTTPS

8.配置服务器自动将所有HTTP请求重定向到HTTPS,确保用户即使输入了HTTP URL也能通过安全的HTTPS连接访问网站。 - 在服务器配置中实现重定向通常很简单,例如在Apache服务器上,你可以使用.htaccess文件来设置重定向规则。

9.更新网站配置和第三方服务

10.更新网站的内部链接,确保它们使用HTTPS。 - 如果你使用了第三方服务(如社交媒体登录、在线支付网关等),请确保它们支持HTTPS,并且配置正确。

11.测试HTTPS配置

12.在全面启用HTTPS之前,使用工具如Qualys SSL Labs的SSL Server Test进行全面测试,确保证书正确安装,且服务器配置符合最佳实践。

Nginx部署本地生成https(左老师笔记)

本地生成在没有域名的情况下基于ip生成,如果存在域名可以基于certbot 生成免费证书

1.检查nginx是否支持配置

(在配置ssl证书之前,要确保你的nginx已经安装了ssl模块,一般情况下自己安装的nginx都是不存在ssl模块的。)

进入/usr/local/nginx/sbin中,执行

./nginx -V

 nginx -V(大写)小写只显示版本;

image-20240401111101496

如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行第5步;

2.证书生成

 解释ubuntu:
 sudo apt-get install libssl-dev
 ​
 centos:
 yum install openssl
 yum install openssl-devel

3.生成证书

  • .key: RSA私钥(Private Key),用于加密和解密数据。

  • .csr: 证书签名请求(Certificate Signing Request),包含了证书申请者的公钥和相关信息,用于向证书颁发机构(CA)请求签发证书。

  • .crt: 自签名证书(Self-signed Certificate),由私钥持有者自行签名的证书,用于证明公钥的真实性。在这种情况下,私钥持有者也是证书颁发机构。

  • .pem: Diffie-Hellman参数,用于支持TLS协商过程中的密钥交换,确保通信的机密性和安全性。

 解释# 1.进入证书目录
 ​
 cd /etc/nginx/sslkey
 ​
 # 2.创建本地私有密钥
 ​
 openssl genrsa -out ssl.key 2048
 ​
 # 3.按提示输入即可
 ​
 openssl req -new -key ssl.key -out ssl.csr
 ​
 # 4.创建证书crt
 ​
 openssl x509 -req -days 1460 -in ssl.csr -signkey ssl.key -out ssl.crt
 ​
 # 5.创建证书pem
 ​
 openssl dhparam -out ssl.pem 2048

4.Nginx 配置

 解释server {
     listen       80;
     return 301 https://$host$request_uri;
 }
 ​
 server {
     listen 443   ssl;
      # ssl证书的pem文件路径  
     ssl_certificate                    /etc/nginx/sslkey/ssl.crt;
     #ssl 证书的key文件路径
     ssl_certificate_key                        /etc/nginx/sslkey/ssl.key;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1.2;
     ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
 }

检查配置项,并重启

 nginx -t 
 ​
 nginx -s reload

自签名证书是一种由服务器管理员自己创建的证书,而不是由 CA 颁发的。这种证书提供了相同级别的加密,但不提供第三方验证身份的信任。自签名证书通常用于内部网络、测试环境或其他不需要公众信任的场景。使用自签名证书的主要问题是浏览器会警告用户这个证书不受信任,因为它没有由已知的 CA 颁发。用户需要手动添加一个例外或信任该证书,才能访问网站。

nginx配置https服务(网络资源)

前置条件:

在配置https之前请确保下面的步骤已经完成

  1. 服务器已经安装nginx并且通过http可以正常访问

    不会安装nginx的可以参考下这篇文章:Linux安装nginx(超详细)

  2. 拥有ssl证书,没有的可以去阿里购买或者免费申请一年

如果以上条件都满足了,接下来开始配置https

第一步:Nginx的ssl模块安装

在配置ssl证书之前,要确保你的nginx已经安装了ssl模块,一般情况下自己安装的nginx都是不存在ssl模块的。

这里先检查下自己是否存在ssl模块:

进入到你的nginx安装目录下面,我的目录是在(/usr/local/nginx),如果你的nginx安装步骤和上面的文章一致的话,那你的目录和我应该是一致的

进入到目录的sbin目录下,输入

 #注意这里是大写的V,小写的只显示版本号
 ./nginx -V  

image-20201202092315511

如果出现 (configure arguments: --with-http_ssl_module), 则已安装(下面的步骤可以跳过,直接进行第二步)。

一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,我的是在(/root/nginx),进入目录后,输入

 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

接下来执行

 make
 #切记不要执行make install,否则会重新安装nginx

上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件,如图:

image-20201202092633829

接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务

 ./nginx -s stop #停止nginx服务
 ​
 #替换之前的nginx
 cp /root/nginx/objs/nginx /usr/local/nginx/sbin

成功之后,进入到nginx安装目录下,查看ssl时候成功

 #注意这里是大写的V,小写的只显示版本号
 ./nginx -V  
 #可以看到这里出现了configure arguments: --with-http_ssl_module   证明已经安装成功

image-20201202092315511

提示:这里替换后在执行 -V命令如果提示权限不足,先给这个nginx文件提升下权限

image-20201202093247907

我是用的是finalshell连接工具,直接右键就可以修改权限了,当然,也可以通过指令修改,如下:

 chmod 111 nginx

第二步:配置ssl证书

解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)

将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹

 #在root目录下创建card文件夹
 cd /root
 mkdir card

image-20201202095434271

第三步:进行nginx.conf配置

进入nginx.conf文件下

 cd /usr/locla/nginx/conf
 #修改nginx.conf文件
 vim nginx.conf

打开之后文件内容如图

image-20201202095750057

可以将没用的东西都删除掉,删除的时候注意,括号要对应起来。

然后进行配置,输入:

 解释http {
     include       mime.types;
     default_type  application/octet-stream;
     sendfile        on;
     keepalive_timeout  65;
   server {
   #监听443端口
     listen 443;
     #你的域名
     server_name huiblog.top; 
     ssl on;
     #ssl证书的pem文件路径
     ssl_certificate  /root/card/huiblog.top.pem;
     #ssl证书的key文件路径
     ssl_certificate_key /root/card/huiblog.top.key;
     location / {
      proxy_pass  http://公网地址:项目端口号;
     }
 }
 server {
     listen 80;
     server_name huiblog.top;
     #将请求转成https
     rewrite ^(.*)$ https://$host$1 permanent;
 }
 }

注意:这里需要在安全组中开放443端口。

第四步:重启nginx

ok,如果上述步骤都完成了,没有问题,接下来只需要重启nginx服务即可。

进入sbin目录下,输入

 ./nginx -s reload
 ./nginx -s stop
 ./nginx 

无提示信息的话,就大功告成了。

在这里插入图片描述

ok,配置https到此就结束了,

4.1申请https CA证书

1.购买域名

1)然后 DNS域名解析

2)域名—–IP

2.备案

服务器在大陆地区,域名需要备案(20个工作日)

3.根据域名申请CA证书

1)购买CA证书

2)通过域名或公网IP申请

3)通过DNS验证域名有效性,验证通过后才能申请

4)配置web服务器,nginx/apache/IIS中HTTPS功能;

如何购买域名

Gitee软件

可以下载同步、回滚,版本控制;

cd /d;

git clone https

静态网页搭建

https://gitee.com

游戏网站搭建

第一步:下载好gitee这个软件

第二步:局域网内:在左老师网站下载 “小游戏压缩包”

外网:“码云–开源”下载游戏源码

第三步:在虚拟机下载并解压

wget 加下载地址

zip格式,所以用unzip解压;

第四步:下载好之后 进nginx配置文件修改路径;

vim nginx.conf

root /data/game

静态网站和动态网站的区别

静态网站:修改的话,需要修改源代码;

动态网站:修改数据库即可;

静态网站是指在服务器上预先创建好的网页,内容固定不变。这意味着无论用户的请求如何,网页都保持不变。一旦静态网站创建完成,它们就可以直接在用户的浏览器上显示,不需要进行任何额外的处理。这种网站通常由HTML、CSS和JavaScript等静态文件组成。由于内容不变,静态网站的加载速度很快,适用于展示简单的信息、产品或服务。但是,静态网站的交互性和个性化程度较低,无法根据用户的需求和操作动态地显示内容。

动态网站**则具有更高的交互性和个性化程度。与静态网站不同,动态网站的内容是根据用户的请求和操作生成的。动态网站通常使用服务器端脚本语言(如PHP、Python或Ruby)和数据库来存储和处理数据。当**用户访问动态网站时,服务器会根据用户的请求从数据库中检索和生成网页内容。这使得动态网站能够根据用户的登录状态、个人偏好和所在位置等信息显示相关内容,提供更加个性化的服务。通过动态网站,用户可以进行交互操作,例如提交表单、评论文章或进行在线购物等。

总结一下,静态网站和动态网站的区别主要在于内容的生成显示方式静态网站在服务器上预先生成并存储网页,内容不随用户的请求而变化,加载速度快;

动态网站根据用户的请求和操作从数据库中生成内容,具有更高的交互性和个性化程度。两者各有优劣,可根据不同的需求选择使用

一键安装(Oneinstack)

4.2安装tomcat

1.局域网内,在老师网站下载压缩包 http://192.168.3.200/Software/apache-tomcat-9.0.87.tar.gz

2.在虚拟机上安装

wget http://192.168.3.200/Software/apache-tomcat-9.0.87.tar.gz

【安装之前/之后安装java】

3.解压,解压到 /opt目录下;

tar -zxvf apache-tomcat-9.0.87.tar.gz -C /opt/

4.查看

image-20240401181123882

5.cd /opt/

cd tomcat1

ls

cd bin

sh startup.sh

netstat -antp | grep java

image-20240401181321109

image-20240401181524965

image-20240401213544774

nginx反向代理

反向代理的实现


location / {

#针对静态网站,php的网站

index index.php index.html index.htm;

#定义首页索引文件的名称 proxy_pass http://192.168.8.58 ;

#请求转向mysvr 定义的服务器列表 }

  • 反向代理的本质就是一个中介服务。

  • nginx的反向代理负载均衡(合理分配)是隧道模式。所有的请求和响应都是要经过nginx的转发

  • 有多台服务器时,使用负载均衡,进行业务的分发。

    轮询(按照顺序依次分发给服务器)

    加权轮询(根据权重,来分配业务量)

  • 动态网站一般有session和cookie: session(建立会话,服务器端会存放一个登录记录,返回sessionid)

    cookie(浏览器的缓存,sessionid)

    ip_hash 根据IP地址进行hash运算,根据hash值来匹配一台服务器,每次访问的都是之前访问的服务器;

    url_hash 根据访问的url进行hash运算,每次访问的都是之前访问的服务器;;

HTTP状态码

200访问成功

403浏览器没有访问权限,后端目录设置问题(权限,路径),selinx拦截;

404网络路径不存在,浏览器地址栏写错了,服务端的url修改了;

502后端服务报错了,常见原因:数据库连接失败,后台程序崩溃等;

302临时重定向,网址临时跳转;

301永久重定向,网页的强制跳转;

跳转百度:

server { listen 80; server_name localhost;

return 301 https: //www.baidu.com;

}

 server {
     listen       80;
     server_name  localhost;
     #反向代理:添加这句
    location / { proxy_pass http://127.0.0.1:8080
      #return 301 https:
 //$host$request_uri;
    }     
 }
 #return 返回新的网页

还需要再下面添加:

server {

listen 127.0.0.1:8080;

index index.html index.hml;

location /{

root /data/game;

}

}

负载均衡的配置

nginx负载均衡和反向代理的区别有:1、实现负载均衡一定要需要反向代理;2、反向代理主要是缓存东西,而负载均衡则是减少高并发情况;3、负载均衡是做反向代理的目的之一。

下面是详细介绍:

负载均衡需要通过反向代理来实现。

反向代理就是指nginx作为前端服务器,将请求转发到后端,再将后端服务器的结果,返回给客户端。

它在中间做了一个代理服务器的角色。

负载均衡对反向代理增加了一些策略,因为后端是多台服务器,nginx会根据设定的策略将请求转发给一个相对空闲的服务器,对负载进行分流,减轻服务器压力。

负载均衡方式一:

反向代理的基础上:添加到server外面,会按IP依次访问:

upstream game {

server 127.0.0.1:8080;

server 192.168.8.70:8080;

server 192.168.8.80:8080;

}

负载均衡方式二:加权轮询

upstream game {

server 127.0.0.1:8080 weight=5;

server 192.168.8.70:8080 weight=1;

server 192.168.8.80:8080 weight=1;

}

负载均衡方式三–ip_hash:

upstream game {

ip_hash

server 127.0.0.1:8080;

server 192.168.8.70:8080;

server 192.168.8.80:8080;

}

其他参数

加参数down,(想要修复某台主机,不想被访问时),可以down掉:

upstream game {

server 127.0.0.1:8080 weight=5;

server 192.168.8.70:8080 weight=1 down;

server 192.168.8.80:8080 weight=1;

}

备份主机,其他主机存活时不会被访问;除非其他机器都挂掉,才会被访问到;

upstream game {

server 127.0.0.1:8080;

server 192.168.8.70:8080 backup;

server 192.168.8.80:8080;

}

nginx优化

nginx速查手册

Nginx功能速查手册

这个 nginx 快速参考常用命和配置使用清单。

由于使用root用户操作太过危险,此手册使用普通用户sudo操作。

yum安装Nginx

 sudo yum install yum-utils
 # 配置Nginx官方的Yum源。
 sudo vim /etc/yum.repos.d/nginx.repo
 # 稳定版
 [nginx-stable]
 name=nginx stable repo
 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=1
 gpgkey=https://nginx.org/keys/nginx_signing.key
 module_hotfixes=true
 ​
 # 测试版
 [nginx-mainline]
 name=nginx mainline repo
 baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=0
 gpgkey=https://nginx.org/keys/nginx_signing.key
 module_hotfixes=true
  sudo yum install nginx

Docker 安装

 docker run --name myNginx \
            -p 80:80 \
            -v /data/www/html:/usr/share/nginx/html \
            -d nginx

配置入门

服务管理

 sudo systemctl status nginx  # nginx当前状态
 sudo systemctl reload nginx  # 重新加载 nginx
 sudo systemctl restart nginx # 重启nginx
 ​
 sudo nginx -t        # 检查语法
 sudo nginx           # 启动
 sudo nginx -s reload # 重启
 sudo nginx -s stop   # 关闭进程
 sudo nginx -s quit   # 平滑关闭nginx
 sudo nginx -V        # 查看nginx的安装状态,

简单代理

 location / {
   # 反向代理地址
   proxy_pass http://127.0.0.1:3000;
   # 代理重定向
   proxy_redirect      off;
   # 代理请求头
   proxy_set_header    Host $host;
 }

全局变量

变量说明
$args这个变量等于请求行中的参数,同 $query_string
$remote_port客户端的端口
$content_length请求头中的 Content-length 字段
$remote_user已经经过 Auth Basic Module 验证的用户名
$content_type请求头中的 Content-Type 字段
$request_filename当前请求的文件路径,由 root 或alias指令与URI请求生成
$document_root当前请求在 root 指令中指定的值
$schemeHTTP方法(如http,https)
$host请求主机头字段,否则为服务器名称
$hostname主机名
$http_user_agent客户端agent信息
$http_cookie客户端cookie信息
$server_protocol请求使用的协议,通常是HTTP/1.0HTTP/1.1
$server_addr服务器地址,在完成一次系统调用后可以确定这个值
$server_name服务器名称
$server_port请求到达服务器的端口号
$limit_rate这个变量可以限制连接速率
$request_method客户端请求的动作,如 GET/POST
$request_uri包含请求参数的原始URI,不包含主机名,如:/foo/bar.php?arg=baz
$remote_addr客户端的IP地址
$uri不带请求参数的当前URI,$uri不包含主机名,如 /foo/bar.html
$document_uri$uri 相同
$nginx_versionnginx 版本

监听端口

 server {
   listen 80;            # 标准 HTTP 协议
   listen 443 ssl;       # 标准 HTTPS 协议
   listen 443 ssl http2; # 对于 http2
   listen [::]:80; # 使用 IPv6 在 80 上收听
   # 仅收听使用 IPv6
   listen [::]:80 ipv6only=on;
 }

域名 (server_name)

 server {
   # 监听 example.com
   server_name example.com;
   # 监听多个域
   server_name example.com www.example.com;
   # 监听所有子域
   server_name *.example.com;
   # 监听所有顶级域
   server_name example.*;
   # 监听未指定的主机名(监听 IP 地址本身)
   server_name "";
 }

负载均衡(简单实例)

 # 默认使用轮训
 upstream test1 {
   server 0.0.0.0:3000;
   server 0.0.0.0:4000;
   server 127.155.142.421;
 }

负载均衡(权重)

 upstream test2 {
   server localhost:8080 weight=9;
   server localhost:8081 weight=1;
 }

upstream ip_hash

 upstream test3 {
   ip_hash;
   server localhost:8080;
   server localhost:8081;
 }

解决负载均衡 session 的问题

upstream fair

 upstream test4 {
   fair;
   server localhost:8080;
   server localhost:8081;
 }

响应时间短的优先分配

server 可选参数

:-:-
weight访问权重数值越高,收到请求越多
fail_timeout指定的时间内必须提供响应
max_fails尝试失败服务器连接的最大次数
down标记一个服务器不再接受任何请求
backup有服务器宕机,标记的机器接收请求

配置示例

 upstream test5 {
   server 127.0.0.1:83 weight=9; # 权重
   server 127.0.0.1:83 weight=1; # 权重
   # 失败超时时间
   server 127.0.0.1:83 max_fails=3;
   server 127.0.0.1:83 weight=3 down;
 }

upstream url_hash

 upstream test6 {
   hash $request_uri;
   hash_method crc32;
   server localhost:8080;
   server localhost:8081;
 }

按访问url的hash结果来分配请求

upstream keepalive

 upstream test7 {
     server 127.0.0.1:11211;
     server 10.0.0.2:11211;
     keepalive 32;
 }

激活缓存以连接到上游服务器

子文件夹中的代理

 location /folder/ {# / 很重要!
   proxy_pass http://127.0.0.1:3000/; # / 很重要!
   proxy_redirect      off;
   proxy_set_header    Host            $host;
   proxy_set_header    X-Real-IP       $remote_addr;
   proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
 }

反向代理

基础
 server {
   listen 80;
   server_name example.com;
   
   location / {
     proxy_pass http://0.0.0.0:3000;
     # 其中 0.0.0.0:3000 是绑定在 
     # 0.0.0.0端口3000 列表上的 Node.js 服务器
   }
 }
基础 + (upstream)
 upstream test1 {
   server 0.0.0.0:3000;
   # 其中 0.0.0.0:3000 是绑定在 
   # 0.0.0.0端口3000 列表上的 Node.js 服务器
 }
 ​
 server {
   listen 80;
   server_name example.com;
   
   location / {
     proxy_pass http://test1;
   }
 }
升级连接(适用于支持 WebSockets 的应用程序)
 upstream test1 {
   server 0.0.0.0:3000;
 }
 ​
 server {
   listen 80;
   server_name example.com;
   
   location / {
     proxy_pass http://test1;
     proxy_redirect off;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $host;
   }
 }

适用于 Node.js、Streamlit、Jupyter 等

静态资源(传统 Web 服务器)

 server {
   listen 80;
   server_name example.com;
   root /data/website;
   # root /path/to/website/ 示例,如果里面没有'root',它将寻找 /data/website/index.html
   location / {
   
   }
   location /images/ { 
       /data/website/images;
   }
   location /videos/ {
       root /data/www/media;
   }
 }

HTTPS 协议

大多数 SSL 选项取决于您的应用程序做什么或需要什么

 server {
   listen 443 ssl http2;
   server_name example.com;
   # 开启ssl功能
   ssl on;
 ​
   ssl_certificate /path/to/ssl.crt;
   ssl_certificate_key /path/to/ssl.key;
 ​
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_trusted_certificate /path/to/fullchain.pem;
 ​
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:50m;
   add_header Strict-Transport-Security max-age=15768000;
 }

重定向(301永久)

www.example.com[1] 重定向到 example.com

 server {
   listen 80;
   server_name www.example.com;
   return 301 http://example.com$request_uri;
 }

将 http 重定向到 https

 server {
   listen 80;
   server_name example.com;
   return 301 https://example.com$request_uri;
 }

重定向(302临时)

 server {
   listen 80;
   server_name yourdomain.com;
   return 302 http://otherdomain.com;
 }

永久重定向到 HTTPS 安全域

 server {
   listen 80;
   server_name yourdomain.com;
   return 301 https://$host$request_uri;
 }

重定向参数

:-:-
permanent永久性重定向。日志中的状态码为 301
redirect临时重定向。日志中的状态码为 302

HTTP 请求端真实的IP

 location / {
   proxy_set_header X-Forwarded-For $remote_addr;
 }

示例

websocket 的代理 keepalive

 # Upstreams
 upstream backend {
     server 127.0.0.1:3000;
     keepalive 5;
 }
 # HTTP Server
 server {
   server_name your_hostname.com;
   error_log /var/log/nginx/rocketchat.access.log;
   location / {
       proxy_pass http://backend;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forward-Proto http;
       proxy_set_header X-Nginx-Proxy true;
       proxy_redirect off;
   }
 }

Apache 的反向代理

 server {
   server_name domain.tld;
 ​
   access_log /log/domain.tld.access.log;
   error_log /log/domain.tld.error.log;
   root /var/www/domain.tld/htdocs;
 ​
   # 将请求传递给 Apache 后端
   location / {
       proxy_pass http://backend;
   }
   # 使用后备处理静态文件
   location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|m4a|mp4|ttf|rss|atom|jpe?g|gif|cur|heic|png|tiff|ico|zip|webm|mp3|aac|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf|webp)$ {
       add_header "Access-Control-Allow-Origin" "*";
       access_log off;
       log_not_found off;
       expires max;
       try_files $uri @fallback;
   }
   # 如果找不到文件,则回退以将请求传递给 Apache
   location @fallback {
       proxy_pass http://backend;
   }
 }

Gitlab 的反向代理

 server {
   #侦听的80端口
   listen       80;
   server_name  git.example.cn;
   location / {
     proxy_pass   http://localhost:3000;
     # 以下是一些反向代理的配置可删除
     proxy_redirect             off;
     # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
     proxy_set_header           Host $host;
     client_max_body_size       10m;  # 允许客户端请求的最大单文件字节数
     client_body_buffer_size    128k; # 缓冲区代理缓冲用户端请求的最大字节数
     proxy_connect_timeout      300;  # nginx跟后端服务器连接超时时间(代理连接超时)
     proxy_send_timeout         300;  # 后端服务器数据回传时间(代理发送超时)
     proxy_read_timeout         300;  # 连接成功后,后端服务器响应时间(代理接收超时)
     # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
     proxy_buffer_size          4k;
     # proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
     proxy_buffers              4 32k;
     # 高负荷下缓冲大小(proxy_buffers*2)
     proxy_busy_buffers_size    64k;
   }
 }

重定向整个网站

 server {
   server_name old-site.com;
   return 301 $scheme://new-site.com$request_uri;
 }

重定向单页

 server {
   location = /oldpage.html {
     return 301 http://example.org/newpage.html;
   }
 }

重定向整个子路径

 location /old-site {
   rewrite ^/old-site/(.*) http://example.org/new-site/$1 permanent;
 }

负载均衡

 upstream example {
   ip_hash;
   # upstream的负载均衡,weight是权重,可以根据机器配置定义权重。
   # weigth参数表示权值,权值越高被分配到的几率越大。
   server 192.168.122.11:8081 ;
   server 127.0.0.1:82 weight=3;
   server 127.0.0.1:83 weight=3 down;
   server 127.0.0.1:84 weight=3; max_fails=3  fail_timeout=20s;
   server 127.0.0.1:85 weight=4;
   keepalive 32;
 }
 server {
   #侦听的80端口
   listen       80;
   server_name  git.example.cn;
   location / {
     # 在这里设置一个代理,和 upstream 的名字一样
     proxy_pass   http://example;
   }
 }

内容缓存

允许浏览器基本上永久地缓存静态内容。Nginx 将为您设置 Expires 和 Cache-Control 头信息

 location /static {
     root /data;
     expires max;
 }

如果要求浏览器永远不会缓存响应(例如用于跟踪请求),请使用 -1

 location = /empty.gif {
     empty_gif;
     expires -1;
 }

跨域问题

 server {
   listen 80;
   server_name api.xxx.com;
     
   add_header 'Access-Control-Allow-Origin' '*';
   add_header 'Access-Control-Allow-Credentials' 'true';
   add_header 'Access-Control-Allow-Methods' 'GET,POST,HEAD';
 ​
   location / {
     proxy_pass http://127.0.0.1:3000;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Host  $http_host;    
   } 
 }

重定向 URI 来解决跨域问题

 upstream test {
   server 127.0.0.1:8080;
   server localhost:8081;
 }
 server {
   listen 80;
   server_name api.xxx.com;
   location / { 
     root  html;                   # 去请求../html文件夹里的文件
     index  index.html index.htm;  # 首页响应地址
   }
   # 用于拦截请求,匹配任何以 /api/开头的地址,
   # 匹配符合以后,停止往下搜索正则。
   location ^~/api/{ 
     # 代表重写拦截进来的请求,并且只能对域名后边的除去传递的参数外的字符串起作用
     # 例如www.a.com/api/msg?meth=1&par=2重写,只对/api/msg重写。
     # rewrite后面的参数是一个简单的正则 ^/api/(.*)$,
     # $1代表正则中的第一个(),$2代表第二个()的值,以此类推。
     rewrite ^/api/(.*)$ /$1 break;
     
     # 把请求代理到其他主机 
     # 其中 http://www.b.com/ 写法和 http://www.b.com写法的区别如下
     # 如果你的请求地址是他 http://server/html/test.jsp
     # 配置一:http://www.b.com/ 后面有“/” 
     #         将反向代理成 http://www.b.com/html/test.jsp 访问
     # 配置一:http://www.b.com 后面没有有“/” 
     #         将反向代理成 http://www.b.com/test.jsp 访问
     proxy_pass http://test;
 ​
     # 如果 proxy_pass  URL 是 http://a.xx.com/platform/ 这种情况
     # proxy_cookie_path应该设置成 /platform/ / (注意两个斜杠之间有空格)。
     proxy_cookie_path /platfrom/ /;
 ​
     # 设置 Cookie 头通过
     proxy_pass_header Set-Cookie;
   } 
 }

跳转到带 www 的域上面

 server {
   listen 80;
   # 配置正常的带www的域名
   server_name www.zuolaoshi.cn;
   root /home/www/wabg/download;
   location / {
       try_files $uri $uri/ /index.html =404;
   }
 }
 ​
 server {
   # 将不带 www 的 zuolaoshi.cn 
   # 永久性重定向到 https://www.zuolaoshi.cn
   server_name zuolaoshi.cn;
   rewrite ^(.*) https://www.zuolaoshi.cn$1 permanent;
 }

代理转发

 upstream server-api {
   # api 代理服务地址
   server 127.0.0.1:3110;    
 }
 upstream server-resource {
   # 静态资源 代理服务地址
   server 127.0.0.1:3120;
 }
 server {
   listen       3111;
   server_name  localhost; # 这里指定域名
   root /home/www/server-statics;
   # 匹配 api 路由的反向代理到API服务
   location ^~/api/ {
       rewrite ^/(.*)$ /$1 break;
       proxy_pass http://server-api;
   }
   # 假设这里验证码也在API服务中
   location ^~/captcha {
       rewrite ^/(.*)$ /$1 break;
       proxy_pass http://server-api;
   }
   # 假设你的图片资源全部在另外一个服务上面
   location ^~/img/ {
       rewrite ^/(.*)$ /$1 break;
       proxy_pass http://server-resource;
   }
   # 路由在前端,后端没有真实路由,
   # 路由不存在的 404 状态的页面返回 /index.html
   # 使用场景,用在 React/Vue项目没有真实路由
   location / {
     try_files $uri $uri/ /index.html =404;
     #                      空格很重要 ^
   }
 }

屏蔽 IP

可以放到 http, server, location, limit_except 语句块

 include blockip.conf;

blockip.conf 里面输入内容,如:

 deny 165.91.122.67;
 ​
 deny IP;            # 屏蔽单个 ip 访问
 allow IP;           # 允许单个 ip 访问
 deny all;           # 屏蔽所有 ip 访问
 allow all;          # 允许所有 ip 访问
 deny 123.0.0.0/8;   # 屏蔽整个段即从 123.0.0.1 到 123.255.255.254 访问的命令
 deny 124.45.0.0/16; # 屏蔽IP段即从 123.45.0.1 到 123.45.255.254 访问的命令
 deny 123.45.6.0/24; # 屏蔽IP段即从 123.45.6.1 到 123.45.6.254 访问的命令
 ​
 # 如果你想实现这样的应用,除了几个IP外,其他全部拒绝
 allow 1.1.1.1; 
 allow 1.1.1.2;
 deny all; 

强制将 http 重定向到 https

 server {
   listen       80;
   server_name  example.com;
   rewrite ^ https://$http_host$request_uri? permanent; # 强制将 http 重定向到 https
   # 在错误页面和“服务器”响应头字段中启用或禁用发射nginx版本。 防止黑客利用版本漏洞攻击
   server_tokens off;
 }

代理转发连接替换

 location ^~/api/upload {
   rewrite ^/(.*)$ /wfs/v1/upload break;
   proxy_pass http://wfs-api;
 }

将地址 /api/upload 替换为 /wfs/v1/upload

爬虫 User-Agent 过滤

 location / {
   if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
       return 503;
   }
   # 正常处理
   # ...
 }

图片防盗链

 location ~* \.(gif|jpg|png|swf|flv)$ {
   root html;
 ​
   valid_referers none blocked *.nginx.com;
 ​
   if ($invalid_referer) {
     rewrite ^/ www.nginx.cn;
     # return 404;
   }
 }

虚拟目录配置

 location /img/ {
   alias /var/www/image/;
 }
 # 访问 /img/ 目录里面的文件时,
 # 会自动去 /var/www/image/ 目录找文件
 location /img/ {
   root /var/www/image;
 }
 # 访问 /img/ 目录下的文件时,
 # 会去 /var/www/image/img/ 目录下找文件

屏蔽文件目录

通用备份和归档文件

 location ~* "\.(old|orig|original|php#|php~|php_bak|save|swo|aspx?|tpl|sh|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rdf)$" {
     deny all;
 }

拒绝访问 .git.svn 目录

 location ~ (.git|.svn) {
     deny all;
 }

拒绝访问隐藏文件和目录

 location ~ /\.(?!well-known\/) {
     deny all;
 }

防盗图配置

 location ~ \/public\/(css|js|img)\/.*\.(js|css|gif|jpg|jpeg|png|bmp|swf) {
   valid_referers none blocked *.jslite.io;
   if ($invalid_referer) {
       rewrite ^/  http://zuolaoshi.cn/piratesp.png;
   }
 }

ulimit 不继承系统设置的问题

  • • 执行 status 命令

     sudo service nginx status

    执行 status 命令,看到 Loaded: loaded (/lib/systemd/system/nginx.service;...) 这一行的nginx.service 文件位置

  • • 打开 service 文件

     sudo vim /lib/systemd/system/nginx.service
  • • 修改 service 中的配置 找到 [Service] 部分,将 LimitNOFILE=65535 添加到该部分

     [Service]
     ...
     LimitNOFILE=65535
     ...

解决 systemctl 管理的 ulimit 不继承系统设置的问题

Gzip 配置

 gzip  on;
 gzip_buffers 16 8k;
 gzip_comp_level 6;
 gzip_http_version 1.1;
 gzip_min_length 256;
 gzip_proxied any;
 gzip_vary on;
 gzip_types
     text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
     text/javascript application/javascript application/x-javascript
     text/x-json application/json application/x-web-app-manifest+json
     text/css text/plain text/x-component
     font/opentype application/x-font-ttf application/vnd.ms-fontobject
     image/x-icon;
 gzip_disable  "msie6";

阻止常见攻击

base64编码的网址
 location ~* "(base64_encode)(.*)(\()" {
     deny all;
 }
javascript eval() url
 location ~* "(eval\()" {
     deny all;
 }

使网站不可索引

 add_header X-Robots-Tag "noindex";
 ​
 location = /robots.txt {
   return 200 "User-agent: *\nDisallow: /\n";
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值