Nginx是一款轻量级的、高性能的Web 服务器/反向代理服务器,其特点是占有内存少,并发能力强。
1、Nginx安装
解压安装包,不要有中文路径,不要保存C盘
2、Nginx启动
右键nginx.exe,超级管理员身份运行。
nginx默认占用端口号80。
访问http://localhost/
3、Nginx命令
①、搜索命令提示符,以管理员身份运行,打开cmd窗口
②、输入D:到D盘
③、cd + 文件夹名到达nginx根目录
④、start nginx 启动
⑤、nginx -s reload 重启
⑥、nginx -s stop 关闭
⑦、nginx -t 检测配置是否正确
4、本地域名解析
本机HOSTS文件位置:
在本机环境中测试时,可以人为地修改域名与IP的映射关系,用自定义的域名代替localhost,相当于域名解析器。
5、Nginx配置
http {
server {
#监听端口号
listen 80;
#监听的域名
server_name localhost;
#反向代理的配置项 / 是正则表达式写法
location / {
#root 关键字 代表文件夹目录
root html;
#默认页面跳转
index index.html index.htm;
}
}
}
5.1、root方式配置
root指定的是根目录,会从根目录开始查找,location指定的路径,在root指定的位置后一定要存在。
使用root,实际的路径就是:root值 + location值。
location /test-root {
root html/1-JT/; #在1-JT下要存在test-root目录
}
访问:http://www.bzyd.com/test-root/20210612/aaa.jpg
一般情况下,建议在“location /”中通过root命令来配置根目录,如:
location / {
root html;
}
那在根目录的html下随意存放自己的资源:
访问路径如下:http://www.bzyd.com/2-JT/20210613/bbb.jpg
5.2、alias方式配置
alias方式配置将会在指定的绝对路径中查找,如:
location /test-alias {
alias D:/3-JT/; #test-alias会被丢弃,后面的内容会被追加到D:/3-JT/进行查找
}
资源存放如下:
访问:http://www.bzyd.com/test-alias/20210612/ccc.jpg
使用alias,实际的路径就是:alias值。
注意:使用alias时,目录名后面一定要加"/"。
5.3、反向代理
随意写个servlet,放在tomcat中启动,端口8080:
package com.bzyd.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
System.out.println("name: " + name);
System.out.println("WebInfPath:" + getWebInfPath());
System.out.println("tomcat目录:" + getTomcatPath());
System.out.println("getContextPath:" + request.getContextPath());
System.out.println("getQueryString:" + request.getQueryString());
System.out.println("getRequestURI:" + request.getRequestURI());
System.out.println("getServletPath:" + request.getServletPath());
System.out.println("getHeader:" + request.getHeader("Host"));
System.out.println("getCookies:" + request.getCookies());
System.out.println("应用目录:" + getTomcatPath() + request.getContextPath() + File.separator);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello Servlet!");
}
/**
* 获取WEB-INF目录
*
* @return
*/
public static String getWebInfPath() {
String path = (Thread.currentThread().getContextClassLoader().getResource("") + "../").replaceAll("file:/", "").replaceAll("%20", " ").trim();
if (path.indexOf(":") != 1) {
path = File.separator + path;
}
return path;
}
/**
* 获取tomcat目录
*
* @return
*/
public static String getTomcatPath() {
return System.getProperty("catalina.home");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--任何一个servlet都至少要这8行配置-->
<servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>com.bzyd.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet名称,和上面相同即可-->
<servlet-name>ServletDemo</servlet-name>
<!--servlet访问路径-->
<url-pattern>/test-servlet</url-pattern>
</servlet-mapping>
</web-app>
nginx配置反向代理:
location /test-proxy-pass {
proxy_pass http://127.0.0.1:8080/;
client_max_body_size 64M;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
访问:http://www.bzyd.com/test-proxy-pass/web/test-servlet?name=Tom
注意:
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径,location值会去掉;如果没有/,表示相对路径,location值也会加上
如上面采用的绝对根路径的方式,实际上代理的路径是:
http://127.0.0.1:8080/web/test-servlet?name=Tom
改成相对路径的配置方式如下:
location /web {
proxy_pass http://127.0.0.1:8080; #这里结尾不要/
client_max_body_size 64M;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
访问路径改成:
http://www.bzyd.com/web/test-servlet?name=Tom
访问成功!