柚子快報(bào)邀請(qǐng)碼778899分享:記錄一次Nginx的使用過程
柚子快報(bào)邀請(qǐng)碼778899分享:記錄一次Nginx的使用過程
一、Docker安裝配置nginx
1.拉取鏡像
docker pull nginx
2.創(chuàng)建掛載目錄
啟動(dòng)前需要先創(chuàng)建Nginx外部掛載目錄文件夾 主要有三個(gè)目錄
conf:配置文件目錄log:日志文件目錄html:項(xiàng)目文件目錄(這里可以存放web文件)
創(chuàng)建掛載目錄
# 創(chuàng)建掛載目錄
mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html
需要授權(quán)文件夾,防止nginx操作文件夾權(quán)限不足
chmod 777 /home/nginx/conf
chmod 777 /home/nginx/log
chmod 777 /home/nginx/html
3.掛載目錄
掛載操作會(huì)直接將兩個(gè)文件夾內(nèi)容同步,若是直接用宿主機(jī)的空文件夾直接掛載到容器內(nèi)部的配置文件目錄上,會(huì)造成nginx容器配置文件目錄被同步為空文件夾,進(jìn)而導(dǎo)致容器啟動(dòng)失敗。 因此我們需要啟動(dòng)一遍容器,將初始配置拷貝出來
創(chuàng)建初始化容器
docker run -itd --name nginx -p 80:80 nginx
復(fù)制容器配置文件到宿主機(jī)
docker cp nginx:/etc/nginx /home/nginx/conf
刪除容器
# 直接執(zhí)行docker rm nginx或者以容器id方式關(guān)閉容器
# 找到nginx對(duì)應(yīng)的容器id
docker ps -a
# 關(guān)閉該容器
docker stop nginx
# 刪除該容器
docker rm nginx
# 刪除正在運(yùn)行的nginx容器
docker rm -f nginx
4.啟動(dòng)容器
docker run \
-p 80:80 \
--name nginx \
-v /home/nginx/conf:/etc/nginx \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx
5.修改配置文件
nginx.conf內(nèi)容如下,主要是對(duì)各種配置進(jìn)行映射,其中的目錄是Docker容器中的目錄,可以根據(jù)掛在目錄映射進(jìn)行相應(yīng)的修改。
include /etc/nginx/conf.d/*.conf;
基礎(chǔ)的操作可以在conf.d目錄下的conf文件配置即可。 配置修改后,需要重啟nginx容器才能使配置生效。
user root;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
default.conf
server {
listen 80; #監(jiān)聽的端口
server_name localhost;
location / {
# 路徑匹配之后,哪個(gè)目錄下去匹配相應(yīng)的網(wǎng)頁,html是相對(duì)路徑
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /api/ {
#反向代理
proxy_pass http://loaclhost:8088/api/;
}
}
二、Nginx反向代理失敗出現(xiàn)了跨域問題
問題描述: 通過以上配置,前端頁面在瀏覽器上已經(jīng)可以訪問了,但是在訪問后端頁面的時(shí)候出現(xiàn)了跨域問題。
解決過程: 此時(shí)非常的疑惑,反向代理不是可以解決跨域問題嗎? 于是,我在后端加上了跨域的配置,還是無法訪問。 然后分析,我的Nginx是部署在Docker上面的,但是后端Java服務(wù)是直接在Linux中用jar包運(yùn)行的。在Docker容器中配置的localhost是否會(huì)找不到服務(wù)器中的localhost?于是換成了ip地址,仍沒有解決。 然后看了下Nginx反向代理的原理:
瀏覽器發(fā)送請(qǐng)求給nginx,nginx把請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù)服務(wù)端向外暴露的是Nginx的監(jiān)聽地址和端口
到這里明白是什么問題了,我在前端的訪問端口是后端項(xiàng)目的端口,而非nginx的監(jiān)聽端口
解決方案:
由于之前nginx配置的監(jiān)聽端口是80端口需要修改,因此需要給nginx容器添加一個(gè)映射端口將前端的請(qǐng)求地址替換為nginx的監(jiān)聽地址
三、Nginx部署vue項(xiàng)目后,刷新報(bào)404
當(dāng)使用Nginx部署vue項(xiàng)目時(shí),刷新頁面可能導(dǎo)致無法找到頁面的問題,這是由于Vue Router使用了前端路由的方式導(dǎo)致的。要解決這個(gè)問題可以進(jìn)行以下配置
server {
listen 8020;
server_name localhost;
location / {
root /usr/share/nginx/html;
#需要指向下面的@router否則會(huì)出現(xiàn)vue的路由在Nginx中刷新出現(xiàn)404
try_files $uri $uri/ @router;
index index.html index.htm;
}
location /api/ {
proxy_pass http://localhost/api/;
}
#對(duì)應(yīng)上面的@router,主要原因是路由的路徑資源并不是一個(gè)真實(shí)的路徑,所以無法找到具體的文件
#因此需要rewrite到index.html中,然后交給路由再處理請(qǐng)求資源
location @router {
rewrite ^.*$ /index.html last;
}
}
四、給Docker容器添加映射端口
有些時(shí)候我們?cè)趧?chuàng)建容器時(shí)就已經(jīng)想好了這個(gè)容器內(nèi)部端口映射哪些外部端口 但是,隨著業(yè)務(wù)的變化我們可能需要添加新的端口信息,以供外部訪問!
1.查看容器的端口映射情況
docker port 容器id
2.查詢?nèi)萜髟诒緳C(jī)的位置
docker inspect 容器
進(jìn)入容器目錄需要修改2個(gè)文件
config.v2.jsonhostconfig.json
3.關(guān)閉Docker進(jìn)程
關(guān)閉Docker進(jìn)程
service docker stop
#或
systemctl stop docker
查看Docker進(jìn)程是否還在運(yùn)行
ps -aux|grep docker
【注】 此時(shí)不能運(yùn)行Docker的命令,不然程序會(huì)自動(dòng)啟動(dòng)
4.修改配置文件
1)修改config.v2.json
找到Config–>ExposedPorts,里面添加想要的端口號(hào)
2)修改配置hostconfig.json
找到PortBindings參數(shù)內(nèi)添加信息
然后啟動(dòng)Docker即可
柚子快報(bào)邀請(qǐng)碼778899分享:記錄一次Nginx的使用過程
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。