Nginx

304 阅读6分钟

个人随笔记录 仅为个人笔记。

1. Linux上安装nginx

依赖安装

yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim

在root下创建文件管理

cd /root
mkdir app
mkdir backup
mkdir download
mkdir logs
mkdir work

基于Yum的方式安装Nginx

查看系统支持版本 。不看的话直接装也行yum install nginx

yum list | grep nginx

自己配置.进入编辑模式

vim /etc/yum.repos.d/nginx.repo

复制进去 记得baseurl 7 对应centos对应版本

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

esc 后:wq 保存退出

1.安装nginx

  • 安装yum install nginx
  • 查看nginx版本号nginx -v
  • 查看nginx安装在哪 rpm -ql nginx

2.文件功能介绍

  • 全局配置文件 /etc/nginx/nginx.conf
  • 默认配置文件/etc/nginx/conf.d/default.conf
  • 网站根目录 /usr/share/nginx/html 这个文件下就是页面。在这个文件夹下输入nginx也是可以启动的,然后就能访问页面。直接访问你服务器就行

3.nginx的启动 停止

  • 停止 nginx -s quit
  • 停止 nginx -s stop
  • 杀死nginx进程killall nginx 暴力停止.好用
  • 启动 systemctl start nginx.service
  • 启动 直接nginx可能没有反应,但是在centos7是可以起来的。可以用查看命令
  • 重启 systemctl restart nginx.service
  • 重载配置文件nginx -s reload
  • 查看nginx进程ps aux | grep nginx
  • 查看端口号开启情况netstat -tlnp

3.配置错误页面

多错误指向一个页面。在子配置文件 /etc/nginx/conf.d/default.conf 这个文件中加上一行404错误页面

   error_page   500 502 503 504  /50x.html;
    error_page  404 /404_error.html;+

如果不出现。看看你的浏览器是不是ie。我的ie就一直不出来。万恶的ie。

3.1配置外部错误页面

还是那个文件夹 vim /etc/nginx/conf.d/default.conf

    error_page   500 502 503 504 /50x.html;
    error_page    404  https://juejin.im/timeline;+

然后重启systemctl restart nginx.service

3.2配置固定ip访问,限制ip

vim /etc/nginx/conf.d/default.conf这个默认配置中

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        deny   127.0.0.1;
        allow   127.0.0.1;
    }

上面的deny就是限制,allow就是允许。403 Forbidden,nginx服务端配置禁止ip白名单

3.3 配置精确的目录权限

vim /etc/nginx/conf.d/default.conf这个默认配置中

location =/img {
    allow all;
}
location =/admin {
    deny all;
}

还可以使用正则。禁止访问.php结尾

location ~\.php$ {
    deny all;
}

3.4 配置虚拟主机 (基于端口号)

/etc/nginx/conf.d 在这个文件下。第一个default.conf 是默认的虚拟主机80端口 每一个server 就是一个虚拟主机 多建立一个3000.conf文件.就是多一个server

3000.conf

server{
        listen 3000;
        server_name localhost;
        root /usr/share/nginx/html/html3000; 
        index index.html;
}

在/usr/share/nginx/html 建立一个html3000文件夹,文件夹下面放一个html即可 root 就是映射到目标文件夹下 index就是映射的目标文件 基于ip的就是修改server_name 对应IP

3.5 Nginx使用域名设置虚拟主机

继续修改那个default.conf文件 server_name baidu.com;

3.6 Nginx反向代理

所谓正向代理:我们一般科学上网。就是靠一个能访问目标服务的代理服务器发出我们想要的请求。很多我们用户->一个代理->一个目标服务 (目标服务不知道我们是谁)保护的IP不被服务器知道

反向代理:相反。我们1个用户访问->一个代理->代理到不知道哪个服务器上。保护服务器IP不被我们知道

反向代理好处:

  • 安全性:正向代理的客户端能够在隐藏自身信息的同时访问任意网站,这个给网络安全代理了极大的威胁。因此,我们必须把服务器保护起来,使用反向代理客户端用户只能通过外来网来访问代理服务器,并且用户并不知道自己访问的真实服务器是那一台,可以很好的提供安全保护。
  • 功能性:反向代理的主要用途是为多个服务器提供负债均衡、缓存等功能。负载均衡就是一个网站的内容被部署在若干服务器上,可以把这些机子看成一个集群,那Nginx可以将接收到的客户端请求“均匀地”分配到这个集群中所有的服务器上,从而实现服务器压力的平均分配,也叫负载均衡。

配置: 找到default.conf 文件

server{
        listen 80;
        server_name nginx2.jspang.com;
        location / {
               proxy_pass http://jspang.com;
        }
}

其它指令:

  • proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。

  • proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。

  • proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。

  • proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。

  • proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。

3.7 Nginx适配PC或移动设配

适配两种:

  • 1.服务端有配置。2个站点对应两套代码。H5移动和PC端。H5移动使用rem自适应。在手机上流畅无比,在电脑上调试时必须手动刷新一下。适用于商城。
  • 2.响应式布局。动态根据浏览器大小。调整布局。这种问题:有很多限制,还有性能问题。因为毕竟PC和移动端布局差别很大。响应式布局做这么大的改动,代码量不是1+1=2而是大于2。代码很容易臃肿。这种常见的就是做一下简单的博客。还有文章展示类页面。只能做到响应式,尺寸的变化一般是xs sm md lg 四个。不能像rem自适应那样动态变化大小。

配置: /usr/share/nginx/html文件夹下建立两个文件夹pc和mobile,对应PC端和H5移动端 $http_user_agent 内置变量 etc/nginx/conf.d default.conf 进入配置文件修改

server{
     listen 80;
     server_name localhost;
     location / {
      root /usr/share/nginx/pc;
      if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
         root /usr/share/nginx/mobile;
      }
      index index.html;
     }
}

3.8 Gzip压缩配置

简单配置/etc/nginx/nginx.conf 文件中。 打开配置。gizp已经默认有,但是被#注释了。放开就行。还有一点自定义的配置

http {
   .....
    gzip on;
    gzip_types text/plain application/javascript text/css;
   .....
}

指令:

  • gzip : 该指令用于开启或 关闭gzip模块。
  • gzip_buffers : 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
  • gzip_comp_level : gzip压缩比,压缩级别是1-9,1的压缩级别最低,9的压缩级别最高。压缩级别越高压缩率越大,压缩时间越长。
  • gzip_disable : 可以通过该指令对一些特定的User-Agent不使用压缩功能。
  • gzip_min_length:设置允许压缩的页面最小字节数,页面字节数从相应消息头的Content-length中进行获取。
  • gzip_http_version:识别HTTP协议版本,其值可以是1.1.或1.0.
  • gzip_proxied : 用于设置启用或禁用从代理服务器上收到相应内容gzip压缩。
  • gzip_vary : 用于在响应消息头中添加Vary:Accept-Encoding,使代理服务器根据请求头中的Accept-Encoding识别是否启用gzip压缩。

如果你是windows操作系统,你可以按F12键打开开发者工具,单机当前的请求,在标签中选择Headers,查看HTTP响应头信息。你可以清楚的看见Content-Encoding为gzip类型。

2. Linux上安装node

centos上只能源码安装。所以先去nodejs.org/en/官网下载吧。 node-v12.14.1-linux-x64.tar.xz

将下载包放到服务器上,你自己选择或者你创建也行 /root/tangjian/app/node-v12.14.1-linux-x64.tar.xz我的扔在这了```

解压:

# cd /root/tangjian/app
# tar -xf node-v12.14.1-linux-x64.tar.xz

安装后。包的同级会出现一个文件夹 node-v12.14.1-linux-x64文件夹更改压缩包的名字为node 。便于操作 建立软连接即可.在linux上的设置软连接相当于是windows下的配制环境变量一个道理

   ln -s /root/tangjian/app/node/bin/npm /usr/local/bin/ 
 
   ln -s /root/tangjian/app/node/bin/node /usr/local/bin/ 

3.Linux上安装pm2

前提:先安装node 全局安装pm2 npm install pm2 -g 在指令后面就是安装在在哪。一般是在node/bin/pm2下面

执行软连接 ln -s /root/tangjian/app/node/bin/pm2 /usr/local/bin/ 其他指令

  • 查看状态 pm2 list
  • 关闭所有pm2进程 pm2 stop all
  • 杀死所有pm2进程 pm2 delete all
  • 启动 pm2 start app.js

3.1部署nextjs

---------如何部署一个nextjs项目----- nextjs本身就是一个服务端。目标就是上到服务器,然后用pm2启动 先删除node_module->打包->上去->解压->npm i>启动 可以在package.json中指定端口号,到时候服务端启动时也是这个端口号访问

"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start -p 3000 "
  },

在window下打一个tar包 tar -zcvf ../blog.tgz .上一层找到那个blog.taz xftp传递到服务器

解压。方法很多种,解压出来就行.然后进入目标项目目录 然后使用pm2 启动```pm2 start npm -- run start``.

如果启动失败,先杀死所以pm2 pm2 delete all ,再启动一次即可

3.2部署eggjs

这里部署一个eggjs的项目 在你的项目中。

npm install --production
tar -zcvf ../release.tgz .

然后上级目录会有一个 release.tgz包。放到linux上 然后解压出来

tar -zxvf release.tgz -C ./server/
tar -zxvf  目标包 -C  目标文件夹

然后进入文件夹。npm i 一下。然后npm start 启动 你会发现权限不足。保证你是root身份,删除node_module. 设置npm 镜像源

npm config set registry http://registry.npm.taobao.org
npm i 
npm start 

停止就是npm stop

参考:

翻阅issuegithub.com/eggjs/egg/i…我太难了...

参考胖哥教程jspang.com/detailed?id…