nginx常用操作

nginx常用操作

1、nginx反向代理

修改/etc/nginx/conf.d/default.cont

server {
	listen 80;
	location / {
	proxy_pass https://localhost:5001;
    #静态页面代理
    #root /var/www/yang;#静态页面目录
	#ndex yang.html;#静态页面首页
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection keep-alive;
	proxy_set_header Host $host;
	proxy_cache_bypass $http_upgrade;
	}
}

2、配置域名映射

#进入nginx配置文件目录,找到nginx的配置文件nginx.conf
cd /usr/local/nginx/conf/

#直接修改
vi nginx.conf
#listen为监听的端口
listen       80;
#server_name为域名
server_name  www.test.com;
#location是访问地址的设置,locahost也可以用服务器ip代替
location / {
proxy_pass http://localhost:8080; 
}

只需要修改server_name和location里面的内容即可

#修改完成后,重新加载配置文件
cd /usr/local/nginx/sbin/
./nginx -s reload

进入域名控制台,添加或者修改解析地址,如果原来配置了解析,新解析需要一定时间才能生效

3、隐藏服务器版本和修改上传限制

#编辑nginx.conf,在http连增加一下内容
vim /etc/nginx/nginx.conf

#修改上传限制
client_max_body_size 500m;

#隐藏服务器版本
server_tokens off;

4、配置ssl访问

ssl证书生成

1、在线生成(本地使用,无权威,不被信任,可以局域网使用):https://www.lddgo.net/encrypt/ssl

2、在线生成(免费,具有权威,被信任):https://freessl.cn/

3、阿里云/腾讯云/华为云的厂商购买

4、本地生成(openssl,本地使用,要被信任,需要公网ip)

mkdir /root/cert
cd /root/cert
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey
server.key -out server.crt
ssl:该指令用来在指定的服务器开启HTTPS,可以使用 listen 443 ssl,后 面这种方式更通用些。
语法ssl on|off;
默认值ssl off;
位置http、server
ssl_certificate:为当前这个虚拟主机指定一个带有PEM格式证书的证书。
语法ssl_certificate filepath;
默认值
位置http、server
ssl_certificate_key:该指令用来指定PEM secret key文件的路径
语法ssl_certificate_key filepath;
默认值
位置http、server
ssl_session_cache::该指令用来配置用于SSL会话的缓存
语法ssl_sesion_cache off|none|[builtin[:size]]|[shared:name:size];
默认值ssl_sesion_cache none;
位置http、server

off:禁用会话缓存,客户端不得重复使用会话

none:禁止使用会话缓存,客户端可以重复使用,但是并没有在缓存中存 储会话参数

builtin:内置OpenSSL缓存,仅在一个工作进程中使用。

shared:所有工作进程之间共享缓存,缓存的相关信息用name和size来指定

ssl_session_timeout:开启SSL会话功能后,设置客户端能够反复使 用储存在缓存中的会话参数时间。
语法ssl_session_timeout time
默认值ssl_session_timeout 5m;
位置http、server
ssl_ciphers:可以使用openssl ciphers查看openssl支持的格式。
语法ssl_ciphers ciphers;
默认值ssl_ciphers HIGH:!aNULL:!MD5;
位置http、server

可以使用openssl ciphers查看openssl支持的格式。

ssl_prefer_server_ciphers:该指令指定是否服务器密码优先客户端密码
语法ssl_perfer_server_ciphers on|off
默认值ssl_perfer_server_ciphers off
位置http、server
		#使用https,端口自定义,默认为443
        listen  443 default ssl;
        #www.example.com你的域名
        server_name     www.example.com;
        #ssl证书配置,根据需求选配
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

		#配置ssl证书,ssl/www.example.com.pem是ssl证书存放位置,一般放在/etc/nginx/下,如果不识别这个路径,填写全称即可
        ssl_certificate ssl/www.example.com.pem;
        ssl_certificate_key     ssl/www.example.com.key;

5、强制域名和https访问,修改http里面的server(非编译安装在conf.d的default.conf路径下)配置

#禁止ip访问,强制域名访问
if ($host != 'www.example.cn'){
    return 403;
}
#禁止http访问,强制https访问
if ($scheme = 'http') {
	return 301 https://$server_name$request_uri;
}
5-1、代理php网站,以可道云做例子
server {
    listen 80;
    server_name localhost;
    root /var/www/kodbox/;
    index  index.html index.htm index.php;

        location ~ \.php$ {
                root kodbox;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /var/www/kodbox$fastcgi_script_name;
                include fastcgi_params;
        }

 }
5-2、反向代理有内置服务器的网站
server {
		#使用http
		listen 80;
		#使用https
        listen  443 default ssl;
        #www.example.com你的域名
        server_name     www.example.com;
        #ssl证书配置,根据需求选配
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

		#配置ssl证书,ssl/www.example.com.pem是ssl证书存放位置,一般放在/etc/nginx/下,如果不识别这个路径,填写全称即可
        ssl_certificate ssl/www.example.com.pem;
        ssl_certificate_key     ssl/www.example.com.key;
    
        location / {
        		#方向代理的地址
                proxy_pass         http://localhost:5212;
                #后端配置支持HTTP1.1,必须配
                proxy_http_version 1.1;
                proxy_set_header   Upgrade $http_upgrade;
                proxy_set_header   Connection keep-alive;
                proxy_set_header   Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   X-Forwarded-Proto $scheme;
        }

}

6、文件服务器

nginx使用的是模块ngx_http_autoindex_module来实现的,该模块处 理以斜杠(“/”)结尾的请求,并生成目录列表。 nginx编译的时候会自动加载该模块,但是该模块默认是关闭的,我们需 要使用下来指令来完成对应的配置

(1)autoindex:启用或禁用目录列表输出
语法autoindex on|off;
默认值autoindex off;
位置http、server、location;
(2)autoindex_exact_size:对应HTLM格式,指定是否在目录列表展示 文件的详细大小 默认为on,显示出文件的确切大小,单位是bytes。 改为off后,显示出 文件的大概大小,单位是kB或者MB或者GB
语法autoindex_exact_size on
默认值autoindex_exact_size on;
位置http、server、location;
(3)autoindex_format:设置目录列表的格式
语法autoindex_format html|xml|json|jsonp;
默认值autoindex_format html;
位置http、server、location;

注意:该指令在1.7.9及以后版本中出现

XML/JSON格式[一般不用这两种方式

(4)autoindex_localtime:对应HTML格式,是否在目录列表上显示时 间。 默认为off,显示的文件时间为GMT时间。 改为on后,显示的文件时间 为文件的服务器时间
语法autoindex_localtime on |off
默认值autoindex_localtime off;
位置http、server、location;
	# 显示目录
	autoindex on;
	# 显示文件大小
	autoindex_exact_size on;
	# 显示文件时间
	autoindex_localtime on;
    #文件目录,windows下改为类似E:/music即可
    root  /var/www/music;
    server{
        listen 80;
        listen 443 default ssl;
        server_name 172.17.165.100;
    #强制使用https访问,按照自己的需求来
        if ($scheme = 'http') {
              return 301 https://$server_name$request_uri;
        }
    #https支持,按照自己的需求来
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    #ssl证书
        ssl_certificate ssl/cert.pem;
        ssl_certificate_key     ssl/private.key;
    }


或者

    server{
        listen 80;
        listen 443 default ssl;
        server_name 172.17.165.100;
    #强制使用https访问,按照自己的需求来
        if ($scheme = 'http') {
              return 301 https://$server_name$request_uri;
        }
    #https支持,按照自己的需求来
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    #ssl证书
        ssl_certificate ssl/cert.pem;
        ssl_certificate_key     ssl/private.key;
    	location /download{
        	# 显示目录
			autoindex on;
			# 显示文件大小
			autoindex_exact_size on;
			# 显示文件时间
			autoindex_localtime on;
    		#文件目录,windows下改为类似E:/music即可
    		root  /var/www/music;
    	}
    }

7、防盗链

资源盗链指的是此内容不在自己服务器上,而是通过技术手段,绕过别 人的限制将别人的内容放到自己页面上最终展示给用户。以此来盗取大 网站的空间和流量。简而言之就是用别人的东西成就自己的网站。

效果演示

京东:https://img14.360buyimg.com/n7/jfs/t1/101062/37/2153/254169/5dcbd410E6d10ba22/4ddbd212be225fcd.jpg

百度:https://pics7.baidu.com/feed/cf1b9d16fdfaaf516f7e2011a7cda1e8f11f7a1a.jpeg?token=551979a23a0995e5e5279b8fa1a48b34&s=BD385394D2E963072FD48543030030BB

我们自己准备一个页面,在页面上引入这两个图片查看效果

在这里插入图片描述

从上面的效果,可以看出来,下面的图片地址添加了防止盗链的功能, 京东这边我们可以直接使用其图片。

Nginx防盗链的实现原理

了解防盗链的原理之前,我们得先学习一个HTTP的头信息Referer,当浏 览器向web服务器发送请求的时候,一般都会带上Referer,来告诉浏览器 该网页是从哪个页面链接过来的。

在这里插入图片描述

后台服务器可以根据获取到的这个Referer信息来判断是否为自己信任的 网站地址,如果是则放行继续访问,如果不是则可以返回403(服务端拒绝访问)的状态信息。

在这里插入图片描述

Nginx防盗链的具体实现: valid_referers:nginx会通就过查看referer自动和valid_referers后面的内 容进行匹配,如果匹配到了就将 i n v a l i d r e f e r e r 变量置 0 ,如果没有匹配到,则将 invalid_referer变量置0,如果没有匹 配到,则将 invalidreferer变量置0,如果没有匹配到,则将invalid_referer变量置为1,匹配的过程中不区分大小写。

语法valid_referers none|blocked|server_names|string…
默认值
位置server、location

none: 如果Header中的Referer为空,允许访问

**blocked:**在Header中的Referer不为空,但是该值被防火墙或代理进行 伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。

**server_names:**指定具体的域名或者IP

string: 可以支持正则表达式和*的字符串。如果是正则表达式,需要以~ 开头表示,例

location ~*\.(gif|jpg|png|jpeg)$
{
    #none blocked不要在一起使用,否则没有效果
    #valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;
    valid_referers www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;
    if ($invalid_referer) {
        return 403;
    }
    root /usr/local/nginx/html/;
}
实际运用

记得如此配置以下命令或者修改静态文件目录的权限,否则会包文件权限不足无法打开错误(日志中),页面永远返回403错误

在这里插入图片描述

在这里插入图片描述

location ~*\.(png|jpg|gif|jpeg|ioc){
	valid_referers server_names https://www.example.com;
	if ($invalid_referer){
		return 404;
	}
	#一定要指定静态路径,否则验证过关也是404
	root /var/www/img/;
}

#有bug
location ~*\.(png|jpg|gif|jpeg|ioc){
	valid_referers blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;
	if ($invalid_referer){
		return 404;
	}
	#一定要指定静态路径,否则验证过关也是404
	root /var/www/img/;
}

Referer的限制比较粗,比如随意加一个Referer,上面的 方式是无法进行限制的。这个问题需要用到Nginx的第三方模块ngx_http_accesskey_module。

8、多个端口指向一个端口

就是对外暴漏一个端口代理所有需要对外暴漏的端口,使用前缀进行反向代理。

server{
        listen 80;
        listen 443 default ssl;
        server_name 172.17.165.100;
    #强制使用https访问,按照自己的需求来
        if ($scheme = 'http') {
              return 301 https://$server_name$request_uri;
        }
    #https支持,按照自己的需求来
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    #ssl证书
        ssl_certificate ssl/cert.pem;
        ssl_certificate_key     ssl/private.key;
    	location /download{
        	# 显示目录
			autoindex on;
			# 显示文件大小
			autoindex_exact_size on;
			# 显示文件时间
			autoindex_localtime on;
    		#文件目录,windows下改为类似E:/music即可
    		root  /var/www/music;
    	}
    #匹配前缀后重写url进行反向代理
            location /musicApi {
                rewrite ^/musicApi(.*)$ $1 break;
                #方向代理的地址
                proxy_pass         http://localhost:5000;
                #后端配置支持HTTP1.1,必须配
                proxy_http_version 1.1;
                proxy_set_header   Upgrade $http_upgrade;
                proxy_set_header   Connection keep-alive;
                proxy_set_header   Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   X-Forwarded-Proto $scheme;
    }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值