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

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

nginx常用配置笔记(反向代理、负载均衡、SSL配置、URL重写等) 1 nginx的核心功能及应用场景
  • 静态资源服务器(静态网站、静态资源访问)
  • 文件服务器(搭配fastDFS可以搭建分布式文件服务器)
  • 虚拟主机
  • 请求转发
  • 反向代理
  • 负载均衡
  • URl请求rewrite
  • 软防火墙
2 nginx安装设置的核心配置文件及相关服务 *** 作命令 2.1 文件上传下载命令:
# 从本地拷贝文件到远程服务器[需要指定拷贝的目的地文件直接在路径后面再跟上文件的名称就可以]

scp nginx-1.20.1.tar.gz [email protected]:/opt/packages

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

scp [email protected]:/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            [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(css|images|js) {
   
      root   /usr/local/nginx/static;
      
      index  index.html index.htm;
  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3993215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存