相信做开发的朋友对nginx或多或少都会有一些了解。即使你没亲手对它做过配置,也会知道有这个东西的存在。下面,我就结合自己在工作中所遇上的问题做一些简单的小笔记。
首先,我们需要明白,在win系统中,点击nginx.exe,它会是一闪而过的的dos窗口。这时,我们是可以在任务管理器的进程中看到它的运行状态的。
如果你在win系统中多次点击,那么在进程中就会出来很多很多个nginx.exe 这样的进程。那么,在这个时候,如果你修改了配置,需要重启nginx,直接使用 nginx -s reload,它是不能生效的。
解决的方法就是先把 任务管理器中的进程全部先关了,之后再运行 nginx.exe即可。
先定位到 nginx.exe 的目录
cd D:\phpstudy_pro\Extensions\Nginx1.15.11
taskkill /f /t /im nginx.exe
1、nginx 代理
server {
listen 8866;
server_name 访问的地址;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root C:\wwwroot\datav_dp\dist; #项目路径(在 linux系统中,路径是斜杠是 向左的)
try_files $uri $uri/ /index.html last;
index index.html index.htm;
}
location /api {
rewrite ^.+api/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://abc.com;#此处修改为自己的请求地址
}
#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;
}
}
2、添加白名单和添加黑名单
server {
listen 4005;
server_name localhost;
index index.html index.htm;
root D:\phpstudy_pro\Extensions\Nginx1.15.11\html\dist;
location / {
#allow 白名单的ip地址;
#deny all;
#上面两行的意思是除了白名单以外,所有的ip都不能访问
#deny 黑名单的ip地址
#allow all
#上面两行的意思是除了黑名单后,所有的ip都能访问
#上面的ip可以是多个(白名单和黑名单的原理是一样的)
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
error_page 403 404 /40x.html;
location = /40x.html{
root D:\phpstudy_pro\Extensions\Nginx1.15.11\html\dist;
}
}
3、有些时候,还希望能让网站密码访问,如下图所示
server {
listen 4005;
server_name localhost;
index index.html index.htm;
root D:\phpstudy_pro\Extensions\Nginx1.15.11\html\dist;
auth_basic "Restricted Access";
auth_basic_user_file D:\phpstudy_pro\Extensions\Nginx1.15.11\html\mypwd.txt; #重要的在这地块,这个就是存密码的文件,注意,文件名必须得有扩展名。密码生成的方法见下文。
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
error_page 403 404 /40x.html;
location = /40x.html{
root D:\phpstudy_pro\Extensions\Nginx1.15.11\html\dist;
}
}
3-1、密码生成的方法(以 windows 系统为例)
(1)、生成密码,我们可以借助第三方工具,htpasswd.exe 来生成。htpasswd.exe一般在安装apache后就会自带有的。当然 ,像现在一些集成的php工具(小皮面板、宝塔都会有)。这儿我就不做介绍了
(2)、定位到 htpasswd.exe 所在的目录下,一般为 apache目录下的bin目录,如下所示【D:\phpstudy_pro\Extensions\Apache2.4.39\bin】,请自己根据实际情况对照自己的目录。
(3)、敲黑板来了
A、打开cmd,定位到 【D:\phpstudy_pro\Extensions\Apache2.4.39\bin】目录
B、在dos命令窗口中,敲如下命令其中
htpasswd 是关键语
-c 是参数(后面跟着是密码文件的路径)
xiaobingpwd.txt 是存密码的文件,如果生成密码成功,会自动生成
admin 是账号(这个不必多说,懂的都懂)
之后会有两次输入密码,第一次是初始的,第二次是确认
成功后,会在这儿生成一个密码文件。当然,上面的命令也可以这样子敲
htpasswd -c d:\路径\pwd.txt admin
C、附加
在上面的命令中,其实还有一些常用的参数
请参考【https://bbs.mymyjd.cn/article/article_39891.html】
#需要注意的以下几个
-c #后面跟着的是路径
-B #在windows系统中,注意是大写-B,它表示在原来的密码文件中再添加一个密码
#所以这两个可以结合起来一起使用
htpasswd -Bc d:\路径\pwd.txt admin #第一个用户名
htpasswd -B d:\路径\pwd.txt admin #第二个用户名
(4)、经过上面生成的密码文件后,把该密码文件放到刚配置nginx的密码目录下即可,最后别忘了重启nginx。
4、vue项目的nginx配置参请参【https://blog.csdn.net/sinat_29740819/article/details/87917263】
5、在vue中,打包后用nginx配置可能会出现跨域的情况。那么,在这种情况下,我们也是可以用代理来解决。
(1)、首先,我们在vue里面,把生产环境里面的api地址设置为空,如下图所示:
(2)、之后在nginx 里面写入配置
server {
listen 9991;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root D:\xiaobing\jnpf文件\原码\jnpf-web-develop\dist;
try_files $uri $uri/ /index.html last;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
location /api {
#proxy_set_header Host $host;
proxy_pass www.abc.com;#此处修改为自己的请求地址
#rewrite ^.+api/?(.*)$ /$1 break;
#include uwsgi_params;
}
#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;
}
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
}```