目录

nginx

更新于 2021-03-01

安装

CentOS Linux release 7.5.1804 (Core)

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx

Ubuntu 20.04

sudo apt update
sudo apt install nginx

初始配置

#设置开机启动
systemctl enable nginx
#启动服务
systemctl start nginx

systemctl restart nginx
systemctl reload nginx

nginx 路径

whereis nginx
/etc/nginx/ 

nginx的403 Forbidden解决的办法(权限文件和文件不存在):

nginx.conf 文件中 第一行改为 user root

配置举例

Aria2

server {
	listen 80 default_server;
	server_name aria.whackeralpha.com;
	root /root/aria2/ariaNg;

	error_page 404 /404.html;
            location = /40x.html {
        }
    error_page 500 502 503 504 /50x.html;
        	location = /50x.html {
        }

}

webdav

server{
        server_name webdav.whackeralpha.com;
        client_max_body_size    1g;
        location / {
               proxy_pass http://127.0.0.1:8080;
				proxy_set_header Host  $host;
        }
}

dropbox

server{
	listen 80;
	server_name file.whackeralpha.com;

	location / {
		proxy_pass https://dl.dropboxusercontent.com;
	}
}

server{
	listen 80;
	server_name apia.whackeralpha.com;
	location / {
		proxy_pass https://api.dropboxapi.com;
	}
}

server{
	listen 80;
	server_name apid.whackeralpha.com;
	location / {
		proxy_pass https://api.dropbox.com;
	}
}

server{
	listen 80;
	server_name contenta.whackeralpha.com;
	location / {
		proxy_pass https://content.dropboxapi.com;
	}
}

server{
	listen 80;
	server_name notifya.whackeralpha.com;
	location / {
		proxy_pass https://notify.dropboxapi.com;
	}
}

server{
	listen 80;
	server_name dr.whackeralpha.com;
	location / {
		proxy_pass https://www.dropbox.com;
	}
}

minio

server{
        server_name backup.whackeralpha.com;
		client_max_body_size    20g;
        location / {
               proxy_pass http://127.0.0.1:9001;
				proxy_set_header Host  $host;
        }
}

seafile

server{
        server_name seafile.jtxiao.com;
		client_max_body_size    20g;
        location / {
               proxy_pass http://127.0.0.1:8001;
				proxy_set_header Host  $host;
        }
}

express

server{
        server_name whackeralpha.com;
        location / {
               proxy_pass http://127.0.0.1:5000;
			   proxy_set_header Host  $host;
        }
}

cloudreve

server{
        server_name cloud.jtxiao.com;
    	client_max_body_size    20g;
        location / {
               proxy_pass http://127.0.0.1:5212;
			   proxy_set_header Host  $host;
        }
}

tencent cos

server{
        server_name scoop.jtxiao.com;
        location / {
           proxy_pass https://scoop-1257291176.cos.ap-hongkong.myqcloud.com;
           proxy_set_header referer https://scoop.jtxiao.com;
		   proxy_set_header Host scoop-1257291176.cos.ap-hongkong.myqcloud.com;
        }
}

aliyun oos

server{
        server_name minio.whackeralpha.com;
        location / {
           proxy_pass https://alpha-alpha.oss-cn-hongkong-internal.aliyuncs.com;
           proxy_set_header referer https://minio.whackeralpha.com;
	       proxy_set_header Host alpha-alpha.oss-cn-hongkong-internal.aliyuncs.com;
        }
}

blackblaze + cloudflare

server{
        server_name c-b2.whackeralpha.com;
        location / {
				proxy_pass https://b2.whackeralpha.com/file/;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header Host b2.whackeralpha.com;
				proxy_ssl_server_name on;
				proxy_ssl_name b2.whackeralpha.com;
        }
}

cloudflare + google drive

server{
        server_name d.whackeralpha.com;
        location / {
				proxy_pass https://pan.whackeralpha.com;
				proxy_set_header Host  pan.whackeralpha.com;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_ssl_server_name on;
				proxy_ssl_name pan.whackeralpha.com;
        }
}

url分路径 + autoindex + aria

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  i.whackeralpha.com;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location /privacy {
                alias /root/dropbox/privacy/;
        }

        location /index {
                alias /root/dropbox/index/; 
                autoindex on; 
                autoindex_format html; 
                autoindex_exact_size off; 
                autoindex_localtime on; 
                charset utf-8,gbk; #展示中文文件名
        }

        location /aria {
                alias /root/.aria2/ariang/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

打开防火墙端口

默认 CentOS7 使用的防火墙 firewalld 是关闭 http 服务的(打开 80 端口)。

$ sudo firewall-cmd --zone=public --permanent --add-service=http
success
$ sudo firewall-cmd --reload
success

打开之后,可以查看一下防火墙打开的所有的服务

firewall-cmd --list-service

ssh dhcpv6-client http

可以看到,系统已经打开了 http 服务。

访问限制【待研究】

1. 添加limit_req_zone

这个变量只能在http使用

http{
  ...
  #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
  #以$binary_remote_addr 为key,限制平均每秒的请求为5个,
  #1M能存储16000个状态,rete的值必须为整数,
  #如果限制两秒钟一个请求,可以设置成30r/m
  limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s;
  ...

2. 添加limit_req

这个变量可以在http, server, location使用 只限制一个站点,所以添加到server里面

 ...
  server{
    ...
    location {
      ...
      #限制每ip每秒不超过20个请求,漏桶数burst为5
      #brust的意思就是,如果第1秒、2,3,4秒请求为19个,
      #第5秒的请求为25个是被允许的。
      #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
      #nodelay,如果不设置该选项,严格使用平均速率限制请求数,
      #第1秒25个请求时,5个请求放到第2秒执行,
      #设置nodelay,25个请求将在第1秒执行。
      limit_req zone=allips burst=5 nodelay;
      ...
    }
    ...
  }
  ...

Nginx浏览目录配置及美化(复制)

**文章标题:Nginx浏览目录配置及美化** **文章字数:4333** 发布时间:**2017年12月27日** 原始链接:** https://lanffy.github.io/2017/12/27/Nginx-Browse-Folder-Config 版权声明:** “署名-非商用-相同方式共享 4.0” 转载请保留原文链接及作者。

在项目中有一个功能需要在浏览器页面中浏览服务器的目录。服务器使用Nginx,而Nginx提供了相应的ngx_http_autoindex_module 模块,该模块提供了我们想要的功能。

Nginx-Fancyindex-Theme

这是从一个项目Fork过来,做了部分改动,并修复了少量bug后的完整的可用项目,需要的可以参考:Nginx-Fancyindex-Theme

Nginx ngx_http_autoindex_module 模块

该模块有以下几个命令:

命令 默认值 值域 作用域 EG
autoindex off on:开启目录浏览;
off:关闭目录浏览
http, server, location autoindex on;打开目录浏览功能
autoindex_format html html、xml、json、jsonp 分别用这几个风格展示目录 http, server, location autoindex_format html; 以网页的风格展示目录内容。该属性在1.7.9及以上适用
autoindex_exact_size on on:展示文件字节数;
off:以可读的方式显示文件大小
http, server, location autoindex_exact_size off; 以可读的方式显示文件大小,单位为 KB、MB 或者 GB,autoindex_format为html时有效
autoindex_localtime off on、off:是否以服务器的文件时间作为显示的时间 http, server, location autoindex_localtime on; 以服务器的文件时间作为显示的时间,autoindex_format为html时有效

浏览目录基本配置

根据上面的命令,一个简单的Nginx浏览目录的配置如下:

location /download
{
    root /home/map/www/; #指定目录所在路径
    autoindex on; #开启目录浏览
    autoindex_format html; #以html风格将目录展示在浏览器中
    autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
    autoindex_localtime on; #以服务器的文件时间作为显示的时间
}

页面展示如下:

image-1

可以看到页面中的展示信息和配置想要的一致,但还有个问题是中文文件名显示的时候乱码。

中文文件名乱码

要解决上面的问题,只需要添加如下配置即可:

charset utf-8,gbk; #展示中文文件名

完整配置如下:

location /download
{
    root /home/map/www/; #指定目录所在路径
    autoindex on; #开启目录浏览
    autoindex_format html; #以html风格将目录展示在浏览器中
    autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
    autoindex_localtime on; #以服务器的文件时间作为显示的时间
    charset utf-8,gbk; #展示中文文件名
}

页面展示如下:

image-2

文件列表的第一行是一个目录,点进去,展示如下:

image-3

稍微有一点审美的同学是不是觉得这样展示不太美观呢?是的,很不美观,感觉乱糟糟的。下面就来解决这个问题。

目录浏览美化

我们使用开源的Fancy Index来美化页面,Github看这里 在美化之前,需要安装Nginx FancyIndex模块。安装模块步骤如下。 查看Nginx当前编译了哪些模块 要查看Nginx编译了哪些模块,执行以下命令:2>&1 nginx -V | tr ' ' '\n'|grep module,如下:

image-4

查看完整的编译参数:nginx -V,如下:

image-5

内容如下:

nginx version: nginx/1.13.8
built by clang 9.0.0 (clang-900.0.39.2)
built with OpenSSL 1.1.0f  25 May 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-pcre --sbin-path=/usr/local/nginx/bin/nginx --with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl@1.1/include' --with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl@1.1/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/var/run/nginx.pid --lock-path=/usr/local/var/run/nginx.lock --http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp --http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp --http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp --http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp --http-log-path=/usr/local/var/log/nginx/access.log --error-log-path=/usr/local/var/log/nginx/error.log --with-http_gzip_static_module --with-http_v2_module

动态编译添加Nginx模块

  1. 在GitHub下载最新源码:ngx-fancyindex
  2. 源码下载下来后,解压,放到nginx源码目录(/usr/local/nginx)中,执行下面的代码,编译: ./configure –prefix=/usr/local/nginx –with-http_ssl_module –with-pcre –sbin-path=/usr/local/nginx/bin/nginx –with-cc-opt='-I/usr/local/opt/pcre/include -I/usr/local/opt/openssl@1.1/include' –with-ld-opt='-L/usr/local/opt/pcre/lib -L/usr/local/opt/openssl@1.1/lib' –conf-path=/usr/local/etc/nginx/nginx.conf –pid-path=/usr/local/var/run/nginx.pid –lock-path=/usr/local/var/run/nginx.lock –http-client-body-temp-path=/usr/local/var/run/nginx/client_body_temp –http-proxy-temp-path=/usr/local/var/run/nginx/proxy_temp –http-fastcgi-temp-path=/usr/local/var/run/nginx/fastcgi_temp –http-uwsgi-temp-path=/usr/local/var/run/nginx/uwsgi_temp –http-scgi-temp-path=/usr/local/var/run/nginx/scgi_temp –http-log-path=/usr/local/var/log/nginx/access.log –error-log-path=/usr/local/var/log/nginx/error.log –with-http_gzip_static_module –with-http_v2_module –add-module=ngx-fancyindex-0.4.2 make 这里不要make install!!!
  3. 进入nginx源码目录下的objs目录,执行2>&1 ./nginx -V | tr ' ' '\n'|grep fan
  4. objs目录下的nginx文件替换/usr/bin下面的nginx即可

选择Fancy Index主题 在Github里面找到了两个开源的主题,分别是:

大家选一个自己喜欢的就好了,这里我选的是第一个。 但是在实际使用过程中,第一个代码有一些问题,我做了一些修改,想要直接可以使用的,可以用这个:https://github.com/lanffy/Nginx-Fancyindex-Theme Fancy Index 配置

  1. 进入Nginx安装的web目录,执行nginx -V,输出configure arguments: --prefix=/usr/local/nginx,就是这个目录 git clone https://github.com/lanffy/Nginx-Fancyindex-Theme.git
  2. 在nginx location模块中添加Fancy Index配置,如下: location /download { include /usr/local/nginx/html/Nginx-Fancyindex-Theme/fancyindex.conf; # 目录美化配置 root /home/map/www/; #指定目录所在路径 autoindex on; #开启目录浏览 autoindex_format html; #以html风格将目录展示在浏览器中 autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB autoindex_localtime on; #以服务器的文件时间作为显示的时间 charset utf-8,gbk; #展示中文文件名 }
  3. 重启Nginx即可

到这一步就完成配置了,最终页面展示如下:

image-6

该主题有两种风格,上面一种是light风格,下面的是dark风格:

image-7

风格在/usr/local/nginx/html/Nginx-Fancyindex-Theme/fancyindex.conf;配置文件中进行修改。

参考资料

  1. 配置 Nginx 的目录浏览功能
  2. Nginx-Fancyindex-Theme
  3. 我的Nginx-Fancyindex-Theme

certbot

官网:https://certbot.eff.org/lets-encrypt/centosrhel7-nginx

安装

CentOS Linux release 7.5.1804 (Core) (aliyun)

yum -y install yum-utils

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional

yum install certbot python3-certbot-nginx

Ubuntu20.02

apt install certbot python3-certbot-nginx

用法示例

certbot --nginx

证书更新

certbot renew

自动更新

配合 crontab 文章

一个报错

在用了很久之后,也许是因为注册了很多域名,有一次使用时候报了一个错误:

An unexpected error occurred:
The server experienced an internal error :: Error retrieving account "https://acme-v02.api.letsencrypt.org/acme/acct/112535668"

多方搜索,发现可能是因为账户问题,那就删除原来的邮箱账户后重新注册一个吧。

mv /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org.old

然后重新运行并使用新邮箱后仍然有错误

An unexpected error occurred:
The server experienced an internal error :: Error creating new order

只好又退回了:退回指令

mv /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org.old /etc/letsencrypt/accounts/acme-v02.api.letsencrypt.org

发现重新运行后又正常了