Nginx部署与维护

安装

直接通过官方仓库安装,细则参考官方文档

添加官方仓库

# 添加nginx官方仓库GPG密钥
curl -s https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
# 添加nginx官方仓库配置文件
echo "deb http://nginx.org/packages/ubuntu/ `lsb_release -sc` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
# 刷新本地软件缓存
sudo apt update

安装软件包

sudo apt install -y nginx
# 注意nginx官方仓库安装的nginx默认不会开机自启动,需要设置开机自启动,而Ubuntu官方仓库的nginx-full/nginx-light包无此问题
sudo systemctl enable nginx
sudo systemctl start nginx

配置

Nginx默认的配置文件存储于/etc/nginx/目录下,官方仓库安装的nginx会在主配置文件/etc/nginx/nginx.conf中使用include conf.d/*.conf;指令引入/etc/nginx/conf.d/*.conf配置文件,建议虚拟主机配置统一存放于/etc/nginx/conf.d/<name>.conf配置文件。

参考/etc/nginx/nginx.conf配置文件内容(做过部分优化):

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
  multi_accept        on;
}

http {
  include        /etc/nginx/mime.types;
  default_type   application/octet-stream;
  server_tokens  off;
  etag           off;
  
  access_log  /var/log/nginx/access.log combined;
  error_log   /var/log/nginx/error.log;
  
  sendfile        on;
  tcp_nopush      on;
  tcp_nodelay     on;
  
  keepalive_timeout    30;
  types_hash_max_size  2048;
  
  gzip             on;
  gzip_min_length  1000;
  gzip_comp_level  6;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types
    text/plain
    text/css
    text/javascript
    text/xml
    application/json
    application/x-javascript
    application/javascript
    application/xml
    application/xml+rss
    application/vnd.ms-fontobject
    application/x-font-ttf
    font/opentype
    font/truetype
    image/svg+xml
    image/x-icon;
  gzip_disable     "MSIE [1-6]\.";
  gzip_vary        on;
  
  include /etc/nginx/conf.d/*.conf;
}

此配置文件结合了Nginx官方版本和Ubuntu仓库版本的两个配置文件,进行了融合。

HTTPS配置(配合let's encrypt免费证书)

首先申请let's encrypt免费证书:

# 安装let's encrypt的certbot-auto脚本,仅第一次部署需要
wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
sudo mv certbot-auto /usr/local/bin/

# 申请免费证书
certbot-auto certonly --webroot -w /usr/share/nginx/html/ -d 你的域名 -m 你的邮件 --agree-tos

申请成功的证书文件存放在/etc/letsencrypt/live/你的域名/,在nginx中直接配置这个证书路径就可以了。参考cipherli的Strong SSL(原理描述参见这篇文档)的配置:

# 第一次需要在/etc/nginx/目录下生成一个dhparam.pem文件
cd /etc/nginx
sudo openssl dhparam -out dhparam.pem 4096

添加对应的/etc/nginx/conf.d/你的域名.conf配置文件:

server {
  listen 443 ssl http2;
  server_name  你的域名;

  ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on; 
  ssl_dhparam dhparam.pem;
  ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
  ssl_ecdh_curve secp384r1;
  ssl_session_timeout  10m;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_stapling on;
  ssl_stapling_verify on;
  resolver 223.5.5.5 114.114.114.114 valid=300s;
  resolver_timeout 5s; 
  # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";

  root /usr/share/nginx/html;
  index index.html;

  ... SNIP ...

  location /.well-known {
    root /usr/share/nginx/html;
  }

  if ($scheme != "https") {
      return 301 https://$http_host$request_uri;
  }
}

以上配置需要注意:

  • TLSv1.3需要openssl 1.1.1以上版本和Nginx 1.13以上版本支持,而当前ubuntu的LTS版本(当前18.04)不支持,所以只启用TLSv1.3会报错。同时写上只是为了以后如果真的需要do-release-upgrade这里不用改动
  • add_header Strict-Transport-Security这一行注释掉是关闭了HSTS,如果需要HSTS的话可以开启,但是注意是否需要影响到其他子域名,有关HSTS的详细描述参考: https://developer.mozilla.org/zh-CN/docs/Security/HTTP_Strict_Transport_Security
  • location /.well-known这个 配置端是为了兼容let's encrypt的证书续期。let's encrypt的HTTP检测会检查/.well-known这个路径
  • 最后一个配置段是强制跳转https,开启http->https的跳转。用户如果访问的是http协议,会强制重定向到https访问。不需要这个功能可以删掉

let's encrypt证书自动续期:

# 交互式编辑crontab
sudo crontab -e
# 打开交互式编辑器之后加入以下内容
0 0 */15 * * /usr/local/bin/certbot-auto renew -q --post-hook '/usr/sbin/service nginx reload'

表示每15天的00:00自动调用certbot-auto renew命令定时续期。

日常维护

服务维护

直接使用service manager即可方便管理

sudo systemctl start/stop/restart/reload/status nginx
sudo service start/stop/restart/reload/status nginx

配置检查

sudo nginx -t

日志查看

默认的日志路径在/var/log/nginx/,其中access.log是用户请求访问日志,error.log是错误日志。默认情况下nginx安装包已经释放了logrotate脚本/etc/logrotate.d/nginx,会对/var/log/nginx/下的*.log文件自动滚动。因此建议自定义的日志文件也放在这个目录下。

如果访问遇到问题,需要开启debug模式查看请求。除了在error_log配置中开启debug级别之外,还必须使用nginx-debug命令运行nginx服务才可以。详细参考官方文档

sudo service nginx stop
sudo service nginx-debug start
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容