nginx常用配置笔记(反向代理、负载均衡、SSL配置、URL重写等)

1 nginx的核心功能及应用场景

  • 静态资源服务器(静态网站、静态资源访问)
  • 文件服务器(搭配fastDFS可以搭建分布式文件服务器)
  • 虚拟主机
  • 请求转发
  • 反向代理
  • 负载均衡
  • URl请求rewrite
  • 软防火墙

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

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

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 文件解压缩命令
# 文件解压缩命令
tar -zxf nginx-1.20.1.tar.gz
2.3 安装命令
# 编译命令[需要进入到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【因为这里暂时还没有配置环境变量】

# 没有配置环境变量需要先进入到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,添加内容如下:

[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 重新加载系统服务命令
systemctl daemon-reload
2.6 通过系统服务设置开机自启以及手动启动、重启、停止NGINX服务命令
# 启动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 加入或取消开机启动

# 设置成开机自启动

systemctl enable nginx.service

# 关闭开机自启动

systemctl disable nginx.service

在这里插入图片描述

2.8 防火墙相关命令

# 添加开放端口

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 侦听端口

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 访问日志配置

server {

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

access_log /path/to/file.log;

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

access_log on;

}
3.3 监听的IP或者域名配置

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 静态资源访问配置
server {

	listen 80;

	server_name mydomain.com;

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

	}
}
3.5 请求重定向
	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进行配置

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

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

    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 负载均衡
	# 负载均衡的配置文件下发如下: 定义一个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.7 负载均衡权重配置【默认轮询】
##### **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协议配置
	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;

		# 中间证书所在路径【中间证书,这个可以自己生成,具体操作可以参考我另外一篇博客https://blog.csdn.net/qq_41865652/article/details/116048879】
		
		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重写
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地址

# 当请求/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

        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存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

     location ~*/(css|images|js) {
       
          root   /usr/local/nginx/static;
          
          index  index.html index.htm;
      }
    

5 一个神奇的网站

网站地址:https://www.digitalocean.com/community/tools/nginx#?
在线进行配置nginx的神器,定制化自动帮你nginx的配置文件,支持反向代理、HTTPS、HTTP2、IPv6, 缓存、WordPress、CDN、Node.js 支持、 Python (Django) 服务器等等的在线生成配置文件,非常强大方便,推荐小白使用哦~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值