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 的依赖库
$ apt-get install build-essential
$ apt-get install libtool
- 安装pcre依赖库
$ apt-get update
$ apt-get install libpcre3 libpcre3-dev
- 安装zlib依赖库
$ apt-get install zlib1g-dev
- 安装ssl依赖库
$ 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/
目录执行如下命令可解决:
$ mkdir logs
$ chmod 700 logs
再次检测配置:
代码语言:shell复制$ nginx -t
如果配置正常,则可以启动nginx:
代码语言:shell复制$ nginx
访问端口确认是否成功启动nginx,在本项目中,访问 http://116.xxx.xxx.xx:80/:
出现如上结果,则已经成功启动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
说明压缩后分块传输。