写在前面的话
关于nginx和jetty之间的事儿是三少奶奶写的一个系列,每个系列环环相扣,所以强烈建议读者从第一话开始食用,希望能对你有所帮助
以下附上系列博文链接
本文主要讲解如何在用户输入域名后直接跳转到我们指定的项目
步骤一:我们在第一个location中的proxy_pass 反向代理的url,由proxy_pass http://localhost:8181/修改成proxy_pass http://localhost:8181/myproject; 即在后面添加了我们放在jetty下的项目名称(myproject),当然,你可以修改成你自己的项目名称
步骤二:再添加一个location模块,localhost后面的正则表达式 匹配的是你项目名称。具体代码如下
解决方法:我们只需要在nginx的配置文件中加入如下代码即可
location /
{
proxy_pass http://localhost:8181/myproject;
}
location ^~ /myproject/
{
proxy_pass http://localhost:8181;
}
解释:当客户端输入域名时 会先走第一个location代理的url,然后,其他的请求就会走第二个location代理的url
下面给出这个系列的完整代码
#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;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server {
listen 80;
server_name www.demo.xyz; #备案域名
rewrite ^ https://$http_host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name www.demo.xyz; #备案域名
keepalive_timeout 70;
ssl_certificate 1_www.demo.xyz_bundle.crt; #申请的域名证书
ssl_certificate_key 2_www.demo.xyz.key; #申请的域名证书
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
location /
{
proxy_pass http://localhost:8181/你的项目名称/;
}
location ^~ /你的项目名称/
{
proxy_pass http://localhost:8181;
}
location ^~ /upload/
{
expires 7d; #缓存7天
alias C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/upload/;
}
location ^~ /myproject/plugins/
{
expires 7d;
# 所有css和js文件 在硬盘中的位置
alias C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/myproject/WEB-INF/static/plugins/;
autoindex on;
}
}
}