FEOps:前端的运维之路-Nginx系统学习

577 阅读3分钟

一些知识:nginx模块一般被分成三大类:handler、filter和upstream

1 购买 tx 云服务器,登录

下载密钥,采用 ssh 密钥登录
$ ssh -i <下载的与云服务器关联的私钥的绝对路径> <username>@<hostname or IP address>

2 一些简单的操作

$ sudo yum -y install nginx # 安装 nginx
$ sudo yum remove nginx # 卸载 nginx

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

$ sudo service nginx restart # 重启 nginx 服务
$ nginx -s reload # 改完conf后重载配置 $ sudo service nginx reload # 重新加载配置,一般在改过 nginx 配置文件时使用
$ ps -ef|grep nginx # 查看 nginx 是否启动 $ ps aux|grep nginx

四种关闭 nginx 服务的方法:

nginx -s quit # 从容停止服务,这种方法较温和,需要进程完成当前工作后再停止。
nginx -s stop # 立即停止服务,这种方法比较强硬,无论进程是否在工作,都直接停止进程。
systemctl stop nginx.service # systemctl 停止,systemctl属于Linux命令
killall nginx # killall 方法杀死进程,直接杀死进程,在上面无效的情况下使用,简单粗暴


ps 命令的作用是显示进程信息的;

| 符号,是个管道符号,表示ps 和 grep 命令同时执行;

grep 命令是查找(Global Regular Expression Print),能使用正则表达式搜索文本,然后把匹配的行显示出来;

ps命令有一些参数: -e : 显示所有进程
-f : 全格式
-h : 不显示标题
-l : 长格式
-w : 宽输出
a :显示终端上的所有进程,包括其他用户的进程。
r :只显示正在运行的进程。
u :以用户为主的格式来显示程序状况。
x :显示所有程序,不以终端机来区分。


3 解析nginx.conf

查看nginx.conf

$ cd etc/nginx
$ vim nginx.conf

配置文件的第一部分:

user nginx;                 # 运行的用户名,默认就是nginx
worker_processes auto;      # 进程数,和CPU核数有关,如CPU是4核就设置为4,有利于nginx处理高并发

error_log /var/log/nginx/error.log;  # 错误日志存放位置
pid /run/nginx.pid;         # nginx存放pid的位置, pid 代表进程标识号process identification,它是在操作系统中创建时自动分配给每个进程的唯一标识号

events {
    worker_connections 1024;   # 后台允许的最大并发数
}

4 错误页面设置,简单的权限设置

error_page指令,deny 指令,allow指令

server {
       listen       80;
       server_name  127.0.0.1;

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

       location / {
           root  /usr/share/nginx/html;
           index  index.html index.htm;
           deny  xxx.xxx.xxx.xxx;   // 禁止某些ip的访问
           allow  xxx.xxx.xxx.xxx;   // 允许某些ip访问
       }
        error_page 404 /404.html;  # 错误页面配置
           location = /40x.html {
       }

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

5 正向代理,反向代理

正向代理:代理客户端,服务器不知道真实客户端来自哪里,如搭梯子,需要客户端自己设置一堆东西
反向代理:代理服务器,客户端不知道访问的是哪个真实服务器,典型的例子是负载均衡服务器

# 反向代理的配置方法:  
server {
        listen       82;
        server_name  127.0.0.1; // 也可以是域名
        location / {   // / 表示全部代理
                proxy_pass https://www.baidu.com; 
        }
    }

此时访问我们现在主机的域名,浏览器打开还是我们的域名地址,但是页面呈现出来的是baidu的网页,说明它不是一个跳转,而是代理成功了

反向代理的其他常用的指令:
proxy_set_header: 更改来自客户端的请求头信息,再发送给后端服务器
proxy_connect_timeout: 设置Nginx与后端代理服务器尝试建立连接的超时时间。
proxy_read_timeout : 设置Nginx向后端服务器组发出read请求后,等待相应的超时时间。
proxy_redirect : 修改后端服务器返回的响应头中的Location和Refresh。

6 Nginx适配移动端和pc端

nginx配置文件也支持 if 语法

Nginx通过内置变量$http_user_agent,可以获取到请求客户端的userAgent,就可以用户目前处于移动端还是PC端,相应地,展示不同的页面给用户。

server {
        listen       82;
        server_name  127.0.0.1;
        location / {
                root  /usr/share/nginx/pc;
                if ($http_user_agent ~* 'Android|iPhone') { // 根据useragent,配置相应的访问资源
                        root /usr/share/nginx/mobile;
                }
                index index.html;
        }
    }

7 配置 gzip

http {
  ...
  gzip         on;          # 网站开启gzip
  gzip_types   text/plain application/javascript text/css;     #指定哪些资源需要开启gzip
  ...
}

当我们开启gzip之后,可以使用站长工具查看网站的gzip情况,如压缩率等:

问题:

Nginx 中配置的error__page页面,和我们前端路由中配置的 not found 页面区别?