目录
三、docker 部署Vue前段代码,做proxy示例(http)
一、安装Centos8下安装Nginx
sudo yum -y install nginx
sudo systemctl start nginx
ps -ef | grep nginx
查看默认安装位置
设置nginx开机自启动
systemctl enable nginx.service
设置防火墙
允许http通信
sudo firewall-cmd --permanent --zone=public --add-service=http
允许https通信
sudo firewall-cmd --permanent --zone=public --add-service=https
重启防火墙
sudo firewall-cmd --reload
二、yum 安装的Nginx 默认文件位置
/usr/sbin/nginx
/etc/nginx
其中/etc/nginx下配置有nginx.conf
常用配置nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen port;
server_name ip;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location ^~ /api/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Request-Headers *;
proxy_pass ip:port;
}
location ^~ /connect/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials 'true';
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Request-Headers *;
proxy_pass ip:port;
}
location / {
proxy_pass ip:port;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
访问日志与报错日志配置在/var/log/nginx
三、docker 部署Vue前段代码,做proxy示例(http)
1.将npm run build 后的dist文件夹上传至服务器/home下
2./home目录下编写dockerfile
# 设置基础镜像
FROM nginx
# 定义作者
MAINTAINER xxx
# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY dist/ /usr/share/nginx/html/
RUN echo 'echo init ok!!'
3.制作镜像
docker build -t demo_vue:v1 .
4.启动容器
docker run -d -p 8001:80 --name demovue demovue:v1
5.查看容器状态
docker ps -a
6 .如果容器关闭,查看日志
docker logs [容器名] --tail -行数
7.访问前端页面
8.访问不了页面,配置防火墙开启端口,记得重启防火墙
四、配置nginx.conf 与解决问题
1.配置nginx.conf向上查看默认配置部分nginx.conf中的server配置,配置listen与location,重启nginx
2.开放listen配置的端口
(1)查看对外开放的端口状态
查询已开放的端口 netstat -anp
查询指定端口是否已开 firewall-cmd --query-port=666/tcp
提示 yes,表示开启;no表示未开启。
(2)添加指定需要开放的端口:
firewall-cmd --add-port=123/tcp --permanent
(3)重启防火墙
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
3.如果启动nginx出现
Failed to parse PID from file /run/nginx.pid: Invalid argument
因为nginx读取出现错误,执行下列命令
mkdir -p /etc/systemd/system/nginx.service.d
printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" >/etc/systemd/system/nginx.service.d /override.conf
systemctl daemon-reload
systemctl restart nginx.service
service nginx status
4.Nginx 启动报 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)
原因是1024以下端口启动时需要root权限,所以sudo nginx即可。
第二种:端口大于1024的情况:
这种情况,需要如下操作:
首先,查看http允许访问的端口:
semanage port -l | grep http_port_t
[root@localhost home]# semanage port -l | grep http_port_t
http_port_t tcp 8833, 44378, 8001, 8822, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
其次,将要启动的端口加入到如上端口列表中
semanage port -a -t http_port_t -p tcp 8833
5.nginx配置报错:connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream
因为服务器上用的是http,所以需要加上下面一段代码
setsebool -P httpd_can_network_connect 1
6.nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
端口被占用,可能是因为多次重启nginx,错误导致进程没结束
ps -A | grep nginx
kill -9 pidxxx