Simon Y.
open main menu
Part of series: tech

nginx 笔记

/ 5 min read

nginx 安装配置,所有的 bash 命令操作均是在 ubuntu 系统下进行的,其他系统可能略有不同。

安装

ubuntu 系统下安装方法

sudo apt install nginx

nginx 命令行语法

主要有启动、重启、停止 nginx 服务语法。

使用如下语句:

## 这是从其他博客中摘抄过来的,在实际操作中,我的 ubuntu 在 /etc/ 目录下并无 init.d 目录
# 启动
sudo /etc/init.d/nginx start
# 重启
sudo /etc/init.d/nginx restart
# 停止
sudo /etc/init.d/nginx stop

## 这也是摘抄而来的,实际操作中,我的 ubuntu 系统中无 service
# 启动
sudo service nginx start
# 重启
sudo service nginx restart
# 停止
sudo service nginx stop
# 重载
sudo service nginx reload

## 这是在实际操作中可行的语句
# 重启
sudo nginx -s reload
# 停止
sudo nginx -s stop

配置文件语法

ubuntu 系统下 nginx 配置文件路径:/etc/nginx/nginx.conf

nginx 是模块化的系统,整个系统由一个个模块组成,每个模块负责不同功能,如果不需要某个模块,可以将其去掉,使得 nginx 变得更小巧,更适合自己。

配置文件大体由三大块组成:events , http , mail。每个块分管不同功能。

更改配置后,要重启 nginx,执行如下步骤:

nginx -t #检查配置文件是否正确
nginx -c /etc/nginx/nginx.conf
nginx -s reload

执行 nginx -c /etc/nginx/nginx.conf 时如果提示端口被占用,则执行 lsof -i:port 查看被占用端口的程序,然后执行 kill port 杀死该进程,再次执行 nginx -c /etc/nginx/nginx.conf

上述命令如果不是 root 用户,则需在命令前加上 sudo 。

反向代理

编辑 /etc/nginx/conf.d 目录下的 default.conf 配置文件,如果不存在的话就新建该文件。在文件中写下如下内容,如果文件中有内容,删除掉原来的内容:

server {
    listen 80;
    server_name your_website_name;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_read_timeout 300s;
        proxy_pass http://127.0.0.1:3000;// 网站实际端口
        client_max_body_size 300M;
        sendfile on;
        send_timeout 300s;
    }
}

配置静态页面时,用如下内容:

server {
    listen 80;
    server_name your_website_name;
    index index.htm index.html;
    root /wwwroot/website;
}

配置二级域名反向代理

nginx 反向代理同一 ip 多个域名,给 header 加上 host 就可以了

server_name 使用

  1. server_name 匹配顺序

    1. 准确的 server_name 匹配

      server {
          listen 80;
          server_name foo.bar.com;
          ...
      }
      
    2. * 通配符开始的字符串

      server {
          listen 80;
          server_name *.bar.com;
          ...
      }
      
    3. * 通配符结束的字符串

      server {
          listen 80;
          server_name foo.*;
          ...
      }
      
    4. 正则表达式

      server {
          listen 80;
          server_name ~^(?.+)\.howtocn\.org$;
          ...
      }
      

    Nginx 将按照 1,2,3,4 的顺序对 server_name 进行匹配,只要有意向匹配就停止搜索。

  2. Nginx 多域名配置

    有两种方法,一种是每个域名写一个配置文件,另一种是多个域名写在一个配置文件里

    1. 每个域名一个文件

      /etc/nginx/conf.d 目录下新建配置文件,例如要绑定 www.foo.com 域名,则建立一个 www.foo.com.conf 文件,然后在文件里填写规则:

      server {
          listen 80;
          server_name www.foo.com;
          ... other configure ...
      }
      

      需要创建什么域名,就创建一个这样的配置文件。

    2. 一个文件多个域名

      其实就是把多个 server 配置写在一个文件里

      server {
          listen 80;
          server_name www.foo.com;
          ... other configure ...
      }
      server {
          listen 80;
          server_name blog.foo.com;
          ... other configure
      }
      
  3. 不带 www 域名加 301 跳转

    如果不带 www 的域名要加 301 跳转,和绑定域名一样,先绑定不带 www 的域名,不用写网站目录,而是进行 301 跳转,如:

    server {
        listen 80;
        server_name foo.com;
        rewrite ^/(.*) http://www.foo.com/$1 permanent;
    }
    
  4. 添加 404 页面

    在 server 中添加 404 规则:

    server {
        ...
        error_page 404 /404.html;
    }
    
  5. 禁止 ip 直接访问

    在第一个 server 前添加一个 server ,内容如下:

    server {
        listen 80 default;
        server_name _;
        return 403;
    }
    

相关链接:

  1. nginx 教程 @htpp2012
  2. docker 入门指南
  3. Nginx 二级域名及多 Server 反向代理配置 -极客学院