一些知识: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 页面区别?