前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx反向代理、负载均衡、SSL配置、URL重写

Nginx反向代理、负载均衡、SSL配置、URL重写

作者头像
网络技术联盟站
发布2023-03-13 21:19:55
1.1K0
发布2023-03-13 21:19:55
举报
1 nginx的核心功能及应用场景
  • 静态资源服务器(静态网站、静态资源访问)
  • 文件服务器(搭配fastDFS可以搭建分布式文件服务器)
  • 虚拟主机
  • 请求转发
  • 反向代理
  • 负载均衡
  • URl请求rewrite
  • 软防火墙

2 nginx安装设置的核心配置文件及相关服务操作命令

2.1 文件上传下载命令:
代码语言:javascript
复制
# 从本地拷贝文件到远程服务器[需要指定拷贝的目的地文件直接在路径后面再跟上文件的名称就可以]

scp nginx-1.20.1.tar.gz root@116.64.151.39:/opt/packages

# 从远程服务器拷贝文件到本地[需要指定拷贝的目的地文件直接在路径后面再跟上文件的名称就可以]

scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 

# 拷贝文件夹

scp -r www.runoob.com:/home/root/others/ /home/space/music/

「注意」:这个scp命令只能在linux系统下可以使用,一般都是安装了linux操作系统的堡垒机或跳板机中使用,如果是windows,可以直接借助ftp客户端工具进行文件上传下载 ❞

2.2 文件解压缩命令
代码语言:javascript
复制
# 文件解压缩命令
tar -zxf nginx-1.20.1.tar.gz
2.3 安装命令
代码语言:javascript
复制
# 编译命令[需要进入到nginx-1.20.1.tar.gz解压文件的根目录下,configure可执行文件在根目录下]
./configure --prefix=/usr/local/software/nginx --error-log-path=/usr/local/software/nginx/logs/error.log --http-log-path=/usr/local/software/nginx/logs/access.log --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/software/nginx/client --http-proxy-temp-path=/usr/local/software/nginx/proxy --http-fastcgi-temp-path=/usr/local/software/nginx/fastcgi --http-uwsgi-temp-path=/usr/local/software/nginx/uwsgi --http-scgi-temp-path=/usr/local/software/nginx/scgi --with-http_stub_status_module --with-http_ssl_module 

# 编译命令
make

# 安装命令
make install
2.4 nignx启动、退出、重新加载配置文件的命令

「需要先进入安装好的目录/usr/local/nginx/sbin【因为这里暂时还没有配置环境变量】

代码语言:javascript
复制
# 没有配置环境变量需要先进入到nginx的安装目录下的sbin目录进行服务的启动

#【默认nginx.conf启动】
 
./nginx
 
#【指定配置文件启动】

./nginx -c conf/nginx.conf

#【快速停止nginx服务】

./nginx -s stop

#【优雅关闭,在退出前完成已经接受的连接请求】

./nginx -s quit

#【重新加载配置】

./nginx -s reload 重新加载配置
2.5 nignx加入系统服务的关键配置文件

需要在/usr/lib/systemd/system目录下创建一个配置文件nginx.service,添加内容如下:

代码语言:javascript
复制
[Unit]
Description=nginx -  web server
After=network.target remote-fs.target nss-lookup.target
  
[Service]
Type=forking
PIDFile=/usr/local/software/nginx/logs/nginx.pid
ExecStartPre=/usr/local/software/nginx/sbin/nginx -t -c /usr/local/software/nginx/conf/nginx.conf
ExecStart=/usr/local/software/nginx/sbin/nginx -c /usr/local/software/nginx/conf/nginx.conf
ExecReload=/usr/local/software/nginx/sbin/nginx -s reload
ExecStop=/usr/local/software/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/software/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target
2.6 重新加载系统服务命令
代码语言:javascript
复制
systemctl daemon-reload
2.6 通过系统服务设置开机自启以及手动启动、重启、停止NGINX服务命令
代码语言:javascript
复制
# 启动nginx

systemctl start nginx

systemctl start nginx.service

# 重启nginx

systemctl restart nginx

systemctl restart nginx.service

# 停止nginx

systemctl stop nginx

systemctl stop nginx.service

# 查看nginx的运行状态

systemctl status nginx.service

systemctl status nginx.service -l

2.7 加入或取消开机启动
代码语言:javascript
复制

# 设置成开机自启动

systemctl enable nginx.service

# 关闭开机自启动

systemctl disable nginx.service
2.8 防火墙相关命令
代码语言:javascript
复制

# 添加开放端口

firewall-cmd --zone=public --add-port=9000/tcp --permanent

# 查询所有开放端口列表

firewall-cmd --list-ports

# 移除开放端口

firewall-cmd --zone=public --remove-port=9000/tcp --permanent

# 重新加载防火墙规则

firewall-cmd --reload

# 启动防火墙

systemctl start firewalld.service

# 重启防火墙

systemctl restart firewalld.service

# 关闭防火墙

systemctl stop firewalld.service

# 查看防火墙的运行状态

systemctl status firewalld.service

systemctl status firewalld.service -l

安装好nginx之后,修改配置文件下的server中监听的端口为一个未被占用的端口,重新启动nginx,通过i浏览器访问http://服务器IP:端口【这里服务器IP就是安装了nginx服务的机器的ip地址,如果是云服务器就是这台机器的公网IP,端口就是刚才修改的配置文件的监听端口】

如上图,则nginx的环境就搭建好了,下面就可以来玩一玩一些比较常见的配置操作了

3 nginx常用配置

nginx的核心配置都是在安装目录下的conf/nginx.conf文件中进行配置的

3.1 侦听端口
代码语言:javascript
复制

server {

# 标准HTTP协议

listen 80;

#  标准HTTPS协议

listen 443 ssl;

# HTTP2

listen 443 ssl http2;

# 使用IPv6侦听80端口

listen [::]:80;

# 只使用IPv6侦听80端口

listen [::]:80 ipv6only=on;

}
3.2 访问日志配置
代码语言:javascript
复制

server {

# 相对或者绝对的日志文件路径【这里注意如果使用相对路径的起始路径默认是nginx的安装目录】

access_log /path/to/file.log;

# 是否开启访问日志【默认是开启的】 

access_log on;

}
3.3 监听的IP或者域名配置
代码语言:javascript
复制

server {

# 主机IP或者域名

server_name mydomain.com;

# 监听多个IP或者域名时,使用空格进行分隔

# server_name mydomain.com www.mydomain.com;

# 监听所有的域

server_name *.mydomain.com;

# 监听所有的顶级域名

server_name mydomain.*;

# Listen to unspecified Hostnames (Listens to IP address itself)

server_name "";

}

3.4 静态资源访问配置
代码语言:javascript
复制
server {

	listen 80;

	server_name mydomain.com;

	location / {
	
		// 网站的静态资源的访问的根目录在服务器上面的存放路径
		
 		root /path/to/website;

	}
}
3.5 请求重定向
代码语言:javascript
复制
server {

	listen 80;
	
	server_name www.mydoamin.com;
	
	# 当请求当前网站首页时,将请求重定向到下面这个请求路径上
	
	return 301 http://mydoamin.com$request_uri;
	
}

server {

	listen 80;
	
	server_name www.mydoamin.com;
	
	# 当请求网站指定的请求路径时,将请求重定向到下面这个请求路径上
	
	location /redirect-url {
	
		return 301 http://otherdomain.com;
		
	}
}
3.6 反向代理

nginx的反向代理配置通过proxy_pass进行配置

代码语言:javascript
复制
server {

	listen 80;
	
	server_name mydomain.com;
	
	# 下面这个location配置的含义就是主机下的80端口是,会将所有的请求的代理到 http://0.0.0.0:10000下进行处理
	
	location / {
	
		proxy_pass http://0.0.0.0:10000;
		
	}
	
}

「反向代理存在一个问题就是会默认代理重定向,导致服务端如果想要获取请求端的请求头数据信息无法获取,这时需要作如下配置,关闭代理重定向,设置代理请求头」

代码语言:javascript
复制
server {

	listen 80;
	
	server_name mydomain.com;
	
	# 下面这个location配置的含义就是主机下的80端口是,会将所有的请求的代理到 http://0.0.0.0:10000下进行处理
	
	location / {
	        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;
            
		    proxy_pass http://0.0.0.0:10000;
		
	}
	
}

3.7 负载均衡
代码语言:javascript
复制
# 负载均衡的配置文件下发如下:定义一个app_request变量[可以任意命名,但是不能使用配置文件的关键字]代理多个服务端
upstream app_request {

 	server 0.0.0.0:10000;
 	
	server 0.0.0.0:10001;
	
	server 116.131.73.102:8080;
	
}

server {

listen 80;

server_name mydomian.com;

location / {

 	# 配置了负载均衡之后,这里不能再使用某个后端服务,而是需要使用 负载均衡配置中使用的app_request变量,切记
 	
	proxy_pass http://app_request ;

}
}
3.8 负载均衡权重配置【默认轮询】
代码语言:javascript
复制
##### weight(权重)

# 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpds {

	# down:表示当前的server暂时不参与负载

    server 127.0.0.1:8050       weight=10 down;
    
    # weight:默认为1.weight越大,负载的权重就越大。
    
    server 127.0.0.1:8060       weight=1;
    
    # backup:其它所有的非backup机器down或者忙的时候,请求backup机器
        
     server 127.0.0.1:8060      weight=1 backup;
     
}

3.9 SSL协议配置
代码语言:javascript
复制
server {
		
	# https协议默认使用443端口
		
	listen 443 ssl;

	# 侦听域名
	
	server_name mydomain.com;

	# 开启ssl协议
	
	ssl on;

	# 证书所在路径【一般就放在配置文件nginx.conf同级目录,其他自定义位置也可以】
	
	ssl_certificate /path/to/cert.pem;
	
	# 私钥所在路径【一般就放在配置文件nginx.conf同级目录,其他自定义位置也可以】
	
	ssl_certificate_key /path/to/privatekey.pem;
	
	ssl_stapling on;
	
	ssl_stapling_verify on;

	# 中间证书所在路径【中间证书,这个可以自己生成】
	
	ssl_trusted_certificate /path/to/fullchain.pem;
	
	# ssl协议版本
	
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

	# ssl协议超时时间	
		
	ssl_session_timeout 1h;

	# sslsession缓存大小
		
	ssl_session_cache shared:SSL:50m;

	# ssl安全创术请求请求头过期时间
	
	add_header Strict-Transport-Security max-age=15768000;
}

# http永久重定向到https配置如下

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

3.10 URL重写
代码语言:javascript
复制
rewrite    <regex>    <replacement>    [flag];
关键字      正则表达式        替代内容         flag标记
  • 关键字:其中关键字error_log不能改变
  • 正则:perl兼容正则表达式语句进行规则匹配
  • 替代内容:将正则匹配的内容替换成replacement
  • flag标记:rewrite支持的flag标记

「rewrite参数的标签段位置【rewrite可以定义在server中、location中、if判断中】」

  • server
  • location
  • if

flag标记说明:

  • last #本条规则匹配完成后,继续向下匹配新的location URI规则
  • break #本条规则匹配完成即终止,不再匹配后面的任何规则
  • redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
  • permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
代码语言:javascript
复制

# 当请求/shop/details?shopId=1时,将请求重写成/shop/details/1.html

rewrite ^/shop/details/1.html$ /shop/details?shopId=1 last;

# 当请求/shop/details?shopId=*时,将请求重写成/shop/details/*.html

rewrite ^/shop/details/(.+).html$ /shop/details?shopId=$1 last;

4 nginx配置文件中的location项

增加每一个location

代码语言:javascript
复制
location /css {
  
 # root用来设置根目录,而alias在接受请求的时候在路径上不会加上location
 
 # 使用root的写法
 
 root /usr/local/nginx/static;
 
 # 使用alias的写法 
  
 # alias /usr/local/nginx/static/css;
}
  
location /images {
         
 root   /usr/local/nginx/static;
 
 使用alias的写法 
 
 # alias /usr/local/nginx/static/images;
}

location /js {
   
 root   /usr/local/nginx/static;
 
 # 使用alias的写法 
 
 # alias /usr/local/nginx/static/js;
}

使用一个location

使用正则

「location 前缀」


没有前缀 匹配以指定模式开头的location


= 精准匹配,不是以指定模式开头


~ 正则匹配,区分大小写


~* 正则匹配,不区分大小写


^~ 非正则匹配,匹配以指定模式开头的location


「location匹配顺序」

  • 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
代码语言:javascript
复制
 location ~*/(css|images|js) {
   
      root   /usr/local/nginx/static;
      
      index  index.html index.htm;
  }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2 nginx安装设置的核心配置文件及相关服务操作命令
  • 3 nginx常用配置
  • 4 nginx配置文件中的location项
    • 增加每一个location
      • 使用一个location
      相关产品与服务
      负载均衡
      负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档