🐇🐇🐇🐇🐇🐇
🐔安装nginx
🐥Linux安装nginx
官网下载: https://nginx.org/
我这里自己下载的是稳定版本 nginx-1.24.0
1️⃣上传到对应目录
cd /usr/local
mkdir nginx
cd /usr/local/nginx
# 上传命令
rz
# 没有话安装一下
yum install lrzsz
2️⃣解压nginx
tar -zxvf nginx-1.24.0.tar.gz
# 一样没有就安装一下
yum install tar
#nginx基于c语言开发,因此需要先安装c语言编译环境以及相关依赖。
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
# 进入文件夹
cd nginx-1.24.0
# 执行configure可执行文件
./configure
# 编译并安装
make && make install
cd /usr/local/nginx/sbin
# 执行nginx可执行文件,启动nginx服务
./nginx
# 停止nginx服务
./nginx -s stop
# 重启nginx服务
./nginx -s reload
3️⃣检查是否启动成功
ps -ef|grep nginx
出现这个两个页面说明启动成功了
🐥使用docker安装nginx
怎么安装docker? 看下面这篇就够了
https://blog.csdn.net/qq_39017153/article/details/131955100
1️⃣拉取镜像
docker pull nginx:latest
2️⃣启动镜像
- 创建文件夹和nginx.conf文件
mkdir -p /data/apps/nginx/html
mkdir -p /data/apps/nginx/logs
mkdir -p /data/apps/nginx/ssl
vi nginx.conf
nginx.conf 文件内容
#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;
client_header_buffer_size 10m;
large_client_header_buffers 4 10m;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8080;
server_name xxxxx;
gzip on;
gzip_static on; # 需要http_gzip_static_module 模块
gzip_min_length 1k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css;
gzip_vary on;
gzip_http_version 1.0; #兼容多层nginx 反代
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
root /usr/share/nginx/html/data/dist/;
location ^~/api/ {
proxy_pass http://xxxxx/; #注意/后缀 后端地址
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
# 避免端点安全问题
if ($request_uri ~ "/actuator"){
return 403;
}
}
}
- 启动镜像
docker run --name nginx \
-p 80:80 \
-p 443:443 \
-p 8080:8080\
-v /data/apps/nginx/html:/usr/share/nginx/html \
-v /data/apps/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /data/apps/nginx/logs:/var/log/nginx/ \
-v /data/apps/nginx/ssl:/etc/nginx/ssl/ \
--privileged=true -d --restart=always nginx
3️⃣查看镜像是否启动成功
docker ps
🐥nginx基本配置
1️⃣简单的反向代理
server {
listen 80; #监听端口
server_name localhost; #服务器名称
location / { #匹配请求url地址
root html; #指定返回静态资源路径
index index.html; #默认首页
# 设置请求头参数
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080; #反向代理配置,将请求转发到指定服务器
}
}
server {
listen 80;
server_name localhost;
gzip on;
gzip_static on; # 需要http_gzip_static_module 模块
gzip_min_length 1k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css;
gzip_vary on;
gzip_http_version 1.0; #兼容多层nginx 反代
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
# 前端打包好的dist目录文件
root /data/dist/;
location ^~/api/ {
proxy_pass http://后端服务地址/; #注意/后缀
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
# 避免端点安全问题
if ($request_uri ~ "/actuator"){
return 403;
}
}
proxy_pass配置反向代理,意味当80端口被访问时,会将请求转发到http://127.0.0.1:8080对应服务上。
2️⃣介绍location配置中root和alias的区别
- 使用 root 时, 服务器里真实的资源路径是 root 的路径拼接上 location 指定的路径
- 使用alias顾名思义是代指 location 的别名, 不论location 是什么, 资源的真实路径都是alias所指定的,所以location是匹配浏览器输入的地址, 真实访问的路径就是alias 指定的路径
- 其他区别
- alias 只能配置在location 中, 而root 可以配置在 server, http 和 location 中
- alias 后面必须要以 “/” 结尾, 否则会查找不到文件, 报404错误; 而 root 对 “/” 可有可无
如果是vue项目 项目刷新以后变成404的问题
try_files $uri $uri/ /popularize/index.html;
加上这段配置即可
location /dist{
root /opt/vue/star-honey-popularize-manage;
index index.html index.htm;
# 解决vue项目刷新以后变成404的问题
try_files $uri $uri/ /dist/index.html;
}
3️⃣nginx 配置https证书
server {
listen 443 ssl;
server_name www.abc.com;#你们的域名,如www.abc.com;
ssl_certificate ssl/public.pem; #根据实际的路径和文件名配置,我这里配置的是相对路径,相对路径前面不能跟/
ssl_certificate_key ssl/private.key;#根据实际的路径和文件名配置,我这里配置的是相对路径,相对路径前面不能跟/
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
3️⃣把http 转发到https
server {
listen 80;
#需要将clover.fit替换成证书绑定的域名。
server_name www.abc.com; #需要转发的域名,如www.abc.com;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
🐥nginx遇到错误
1️⃣NGINX 上的 SSL 证书无法加载
nginx: [emerg] cannot load certificate "/etc/nginx/public.pem": BIO_new_file() failed (SSL: error:80000002:system library::No such file or directory:calling fopen(/etc/nginx/public.pem, r) error:10000080:BIO routines::no such file)
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
没有权限读取
路径配置错误或docker服务ssl目录未挂载
2️⃣打包后部署的访问无法访问前端项目问题记录
- docker部署html,是nginx容器内的地址不是挂载地址
/usr/share/nginx/html
- 您所使用的IP有域名未备案,需要先完成ICP备案后才可以使用80/443端口。