在ubuntu系统部署Nginx

2023-11-17 08:02:27 浏览数 (2)

1 安装nginx

安装信息:

  • 登入终端:

主机:116.xxx.xxx.xx

端口:8123

用户名:root

密码:xxxxxx

  • 最终安装信息:

Nginx版本:1.19.8

Nginx存放目录:/usr/local/nginx

前端存放目录:/home/wyy/ai_html

SSL证书存放目录:/usr/local/nginx/sslkey

1.1 检查是否安装nginx

代码语言:shell复制
$ ps -ef | grep nginx
root     31450 31429  0 02:04 pts/2    00:00:00 grep --color=auto nginx  

检测到并未安装,下一步开始安装nginx。

1.2 安装nginx

1.1.1 安装依赖库

检查是否安装库命令,例如是否已安装zlib

代码语言:shell复制
$ dpkg -l | grep zlib

如果已经安装,可以跳过该依赖库的安装。

如果没有安装,则安装以下依赖库:

  • 安装gcc g 的依赖库
代码语言:shell复制
$ apt-get install build-essential
$ apt-get install libtool
  • 安装pcre依赖库
代码语言:shell复制
$ apt-get update
$ apt-get install libpcre3 libpcre3-dev
  • 安装zlib依赖库
代码语言:shell复制
$ apt-get install zlib1g-dev
  • 安装ssl依赖库
代码语言:shell复制
$ apt-get install openssl libssl-dev
1.1.2 安装nginx

下载安装包:

代码语言:shell复制
$ wget https://nginx.org/download/nginx-1.19.8.tar.gz

解压:

代码语言:shell复制
$ tar -zxvf nginx-1.19.8.tar.gz

解压后的文件夹重命名为nginx文件夹:

代码语言:shell复制
$ mv nginx-1.19.8 nginx

移动文件夹到ubuntu常见软件目录下:

代码语言:shell复制
$ mv nginx/ /usr/local/

进入目录:

代码语言:shell复制
$ cd /usr/local/nginx

配置命令:

代码语言:shell复制
$ ./configure --prefix=/usr/local/nginx --with-http_gzip_static_module --with-http_v2_module --with-pcre --with-http_ssl_module --conf-path=/usr/local/nginx/conf/nginx.conf

编译:

代码语言:shell复制
$ make

安装:

代码语言:shell复制
$ make install

通过软连接,这样就可以直接使用 nginx 执行:

代码语言:shell复制
$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

测试是否安装成功:

代码语言:shell复制
$ nginx -V
nginx version: nginx/1.19.8
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
built with OpenSSL 1.1.1  11 Sep 2018
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_gzip_static_module --with-http_v2_module --with-pcre --with-http_ssl_module --conf-path=/usr/local/nginx/conf/nginx.conf

安装nginx成功!

2 启动nginx

检查配置信息是否正确:

代码语言:shell复制
$ nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

以上结果显示,配置信息正常。

P.S. 如果显示如下信息:

代码语言:shell复制
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2016/09/13 19:08:56 [emerg] 6996#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)

是因为nginx/目录下没有logs文件夹,在/usr/local/nginx/目录执行如下命令可解决:

代码语言:shell复制
$ mkdir logs
$ chmod 700 logs

再次检测配置:

代码语言:shell复制
$ nginx -t

如果配置正常,则可以启动nginx:

代码语言:shell复制
$ nginx

访问端口确认是否成功启动nginx,在本项目中,访问 http://116.xxx.xxx.xx:80/:

Welcome to nginx!Welcome to nginx!

出现如上结果,则已经成功启动nginx!

3 配置nginx

3.1.上传代码

通过FTP上传项目代码至规定的目录:/home/wyy,本项目中,前端代码存放在/home/wyy/ai_html/目录中。

3.2.配置nginx.conf

进入conf/目录:

代码语言:shell复制
$ cd /usr/local/nginx/conf

备份默认的nginx.conf为nginx.default.conf:

nginx.conf的内容如下:

代码语言:shell复制
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # server {
    #     listen       80;
    #     server_name  localhost;

    #     #charset koi8-r;

    #     #access_log  logs/host.access.log  main;

    #     location / {
    #         root   html;
    #         index  index.html index.htm;
    #     }

    #     #error_page  404              /404.html;

    #     # redirect server error pages to the static page /50x.html
    #     #
    #     error_page   500 502 503 504  /50x.html;
    #     location = /50x.html {
    #         root   html;
    #     }
    # }
    include website/*.conf;
}

在当前目录新建website文件夹,然后添加ai.conf,配置本项目:

ai.conf的内容如下,端口为80:

代码语言:shell复制
server {
  listen 80;
  error_page  404 /index.html;
  client_max_body_size 100m;

  location / {
      root /home/wyy/ai_html; # 前端代码文件位置
      index index.html;
      try_files $uri $uri/ /index.html; # 解决vue刷新404的问题
  }
  location /api/ {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
    add_header 'Cache-Control' 'no-cache';

    if ($request_method = 'OPTIONS') {
        return 200;
    }
    proxy_pass http://127.0.0.1:9999/; # 反向代理
    # rewrite ^/b/(.*)$ /$1 break;
  }

  location /knowledgeApi/ {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
    add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
    add_header 'Cache-Control' 'no-cache';

    if ($request_method = 'OPTIONS') {
        return 200;
    }
    proxy_pass http://127.0.0.1:8888/; # 反向代理
    # rewrite ^/b/(.*)$ /$1 break;
  }
}

3.3.启动项目

检查配置是否正常:

代码语言:shell复制
$ nginx -t

如果正常,则热重载nginx:

代码语言:shell复制
$ nginx -s reload

刷新http://116.xxx.xxx.xx:80/可以看到配置指定站点。

3.4.配置证书和https

/usr/local/nginx/目录下创建sslkey目录,存放SSl证书:

配置https,修改ai.conf(具体配置需要看云服务器要求):

代码语言:shell复制
server {
  listen                  443 ssl; # SSL 默认访问端口号为 443
  server_name             127.0.0.1; # 绑定证书的域名
  ssl_certificate         /usr/local/nginx/sslkey/smarthome_server.crt;
  ssl_certificate_key     /usr/local/nginx/sslkey/smarthome_server.key;
  error_page  404 /index.html;
    
  location / {
    # ...
  }
  location /api/ {
    # ...
  }
  location /knowledgeApi/ {
    # ...
  }
}

# HTTP请求自动跳转HTTPS
server {
  listen 80;
  error_page  404 /index.html;
  client_max_body_size 100m;
  return  301 https://$server_name$request_uri; # 把HTTP的域名请求转成HTTPS
}

3.5.启动项目

代码语言:shell复制
$ nginx -t
$ nginx -s reload

如果网页地址栏出现小锁标志,表示证书已经安装成功。

3.6.防火墙设置

代码语言:shell复制
$ sudo ufw allow 'Nginx HTTP' # 此配置文件仅打开端口80
$ sudo ufw allow 'Nginx HTTPS' # 此配置文件仅打开端口443

# 输入以下命令以启动防火墙
$ sudo ufw enable   # 开启
$ sudo ufw disable    # 关闭

# 输入以下命令以查看防火墙状态
$ sudo ufw status    # 查看
# inactive状态是防火墙关闭状态 active是开启状态

3.7 配置gzip

代码语言:shell复制
server{
    gzip on; # 开启gzip
    gzip_buffers 32 4K; # 设置用于处理请求压缩的缓冲区数量和大小,使用默认值即可
    gzip_comp_level 6; # 压缩等级【1-9】,等级越高压得越小,越消耗GPU计算资源
    gzip_min_length 1k; # 当文件大于等于1k时,开始压缩
    gzip_types application/javascript text/css text/xml; # 不应压缩图片、MP3、MP4类型:压缩率小,太费GPU资源
    gzip_disable "MSIE [1-6]."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_vary on; # 增加响应头”Vary: Accept-Encoding”
    gzip_proxied any; # Nginx做反向代理时,无条件压缩所有结果数据
}

重启nginx后,查看网页文件的响应头信息:

Content-Encoding:gzip 说明开启了gzip压缩;

Transfet-Encoding:chunked 说明压缩后分块传输。

0 人点赞