Ubuntu 下NGINX 的简单使用

1.NGINX的安装与卸载

1.1.安装NGINX

apt-get install nginx

1.2.NGINX操作命令

service nginx start  #启动
service nginx reload #重新加载配置文件
service nginx restart #重启
service nginx status #查看运行状态

1.3.卸载NGINX

apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。
apt-get purge nginx nginx-common # 卸载所有,包括删除配置文件。
apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。
apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

2.NGINX配置

2.1.开启gzip压缩

在nginx.conf的http {}块中增加下述配置,则开启gzip压缩

	gzip on;
	# 开启 gzip_static
	# gzip_static 开启后可能会报错,需要安装相应的模块, 具体安装方式可以自行查询
	# 只有这个开启,前端打包的 .gz 文件才会有效果,否则不需要开启 gzip 进行打包
	gzip_static on;
	gzip_proxied any;
	gzip_min_length 1k;
	gzip_buffers 4 16k;
	# 如果 nginx 中使用了多层代理,必须设置这个才可以开启 gzip
	gzip_http_version 1.0;
	gzip_comp_level 2;
	gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
	gzip_vary off;
	gzip_disable "MSIE [1-6]\.";

 2.2.配置一个网站服务,并且支持跨域访问后台API

server {
    listen 8080; #网站端口
    server_name www.myservice.com; #网站名称
    location / {
        root   /opt/gnss/mysystem/dist; #存储前端打包的文件目录
        index index.html; #默认页面
		try_files $uri $uri/ /index.html; 
    }
	location /api/ {
		proxy_pass http://localhost:8080/; #后台API地址
	}
}

 try_files说明:

  1. 按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
  2. 查找路径是按照给定的root或alias为根路径来查找的
  3. 如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
  4. 如果是格式2,如果最后一个参数是 = 404 ,若给出的file都没有匹配到,则最后返回404的响应码

如果我们这里不进行配置,则在系统中执行页面刷新会报404错误。

配置中关于location /api/,这里的api不是我们随意定义的,需要跟前端进行约束,用来匹配前端请求接口的时候指定访问的接口是以:/api/xxxxx为格式,则会将这个请求代理成:

http://localhost:8080/xxxxx

这样以来,前端在请求接口的时候无需设置接口的URL具体地址,只需要通过一个约束的“api”前缀就可以进行接口请求了。

3.访问限制

3.1.指定IP访问或者禁止

以内网IP为例,公网IP同理。

在Nginx配置的server块中进行如下配置:

1.只允许192.168.1.1的IP访问,其他IP禁止访问。deny all;不能写在allow前面,会导致阻止所有的访问。

allow 192.168.1.1/24;
deny all;

2.禁止192.168.1.1、192.168.1.2、192.168.1.3访问,允许其他IP访问。

deny 192.168.1.1;
deny 192.168.1.2;
deny 192.168.1.3;
allow all;

3.如果有大量的IP需要写,可以将上面的语句写在文件里,然后在server块中导入这个文件。这样在同一个服务器中有多个站点都需要这个同样的配置时,容易维护,后面更新IP只需要更新这个文件的内容,不用把每个站点的Nginx配置都改一遍。

更新文件中的IP后,需重载Nginx配置才生效。

include /home/ip_limit/ip_limit.conf;

被阻止访问时,页面显示403 Forbidden。

3.2.自定义403界面

403页面可以自定义,同样是在Nginx配置的server块中(也可以写在location中)。将页面写在/home/ip_limit/403_my.html,这个html中如果有图片,最好写死成base64。最好不要用403.html这个文件名,可能和网站根目录中默认403页面冲突,导致自定义403页面不生效。我的网站只允许指定城市访问,所以Nginx中我配置了allow xxx和deny all;,这样会导致在其他城市访问时还是403 Forbidden,自定义的403页面不生效,所以需要单独设置这个自定义403页面为允许所有的访问。

error_page 403 /403_my.html;
location /403_my.html {
  allow all;  #不加会由于前面的allow和deny all导致阻止加载这个自定义的403页面,从而自定义403页面不生效
  root /home/ip_limit;
  internal;  # 防止直接访问这个页面,不加也行
}

做完上面的配置后,如果自定义403页面中的图片不是写死成base64,会发现被阻止访问时,页面中的图片没加载出来(img标签中src="./403.png"),然后查了资料在Nginx配置的server块中加了下面的内容,这样自定义403页面中的图片确实可以加载了(前提是这个图片在这里的root处设置的路径中,同理src的值也要做相应的调整),但正常访问网站时有的图片无法加载了。可能因这个设置导致网站的所有图片都从这里设置的路径中加载,但实际无法加载的图片没存放在这里。所以这个配置不具有通用性,还有个方法我没试,就是不加这个配置,把自定义403页面中的图片的src换成一个可加载的网络url。

location ~ .*\.(png|jpg|jpeg|gif|svg|ico){
  allow all;
  root /www/wwwroot/test/web;
}

3.3.限制访问次数

使用HTTP模块的limit_conn和limit_req指令:除了使用deny和allow指令来禁止特定IP的访问外,还可以使用HTTP模块的limit_conn和limit_req指令来限制特定IP的连接数和请求频率。这些指令可以在Nginx的配置文件中的http块中设置。例如,要限制IP地址为192.168.1.100的连接数为1,并限制其请求频率为10个请求/秒,可以在配置文件中添加以下内容:

http {
    ...
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
    limit_conn conn_limit_per_ip 1;
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
    limit_req zone=req_limit_per_ip burst=20;
    ...
}

这样,当IP地址为192.168.1.100的客户端的连接数超过1或请求频率超过10个请求/秒时,Nginx将限制其访问。 通过以上几种方法,可以在Nginx中有效地禁用特定IP的访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值