当前位置: 代码网 > 服务器>服务器>Linux > nginx配置location和proxy_pass时斜杠怎么加?实例详解常见坑

nginx配置location和proxy_pass时斜杠怎么加?实例详解常见坑

2026年09月15日 Linux 我要评论
官网下载https://nginx.org/en/download.html若是windows 安装,请下载windows版本即可。我们这里下载的文件为 nginx-1.28.1.tar.gz安装将文

官网下载

https://nginx.org/en/download.html

若是windows 安装,请下载windows版本即可。

我们这里下载的文件为 nginx-1.28.1.tar.gz

安装

将文件上传到安装目录(如:/opt/app/software)后执行如下命令

# 解压
$> cd /opt/app/software
$> tar -zxvf nginx-1.28.1.tar.gz
# 进入安装文件目录
$> cd nginx-1.28.1
# .configure
$> ./configure --prefix=/opt/app/software/nginx --with-http_ssl_module
$> make
$> make install

–prefix 配置为安装目录,若不配置,则默认为 /usr/local/nginx ,configure 还有其他选项,可自行选择。参考官网:https://nginx.org/en/docs/configure.html

with-http_ssl_module 需要先安装 openssl ,必要时可以使用 --with-openssl=path 配置 openssl 的路径。

命令

启动

$> cd /opt/app/software/nginx/sbin
$> ./nginx

查看 nginx 版本

$> cd /opt/app/software/nginx/sbin
$> ./nginx -v

检查配置是否正确

$> cd /opt/app/software/nginx/sbin
$> ./nginx -t

修改好配置后验证配置语法是否正确

停止

$> cd /opt/app/software/nginx/sbin
$> ./nginx -s stop

查看 configure 参数

$> cd /opt/app/software/nginx/sbin
$> ./nginx -v

在 nginx 升级时,此命令很有用,可以查看旧版本的 nginx 的 configure 参数,方便升级后使用同样的参数安装升级

重新加载配置

$> cd /opt/app/software/nginx/sbin
$> ./nginx -s reload

常见配置问题

proxy_pass 路径后面的 /

# 配置一
location /test {
  proxy_pass 'http://192.168.1.1:8080';
}

# 配置二
location /test {
  proxy_pass 'http://192.168.1.1:8080/';
}

假如说我们要请求的后端接口是/test/demo/getlist

那么这两个配置会产生两个截然不同的请求结果:

  • http://192.186.0.1:8080/test/demo/getlist (匹配配置一)
  • http://192.186.0.1:8080/demo/getlist (匹配配置二)

区别就在于是否保留了/test这个路径前缀,proxy_pass 后面的这个/,它表示去除/test前缀。

location 上的 /

# 配置一
location /test {
  proxy_pass 'http://192.168.1.1:8080';
}


# 配置二
location /test/ {
  proxy_pass 'http://192.168.1.1:8080';
}
  • /test是前配置,表示匹配/test以及/test/开头的路径,比如 /test/demo/getlist,/testxxx等都会被匹配到。
  • /test/是更精准的匹配,表示只匹配以/test/开头的路径,比如/test/demo/getlist会被匹配到,但 /test123、/test 不会被匹配到。(推荐使用此方式,严格规定上下文)

nginx 配置示例

# 指定工作进程的用户(不论用什么账号执行),如不设置,则使用执行启动命令的账号
user  root;
# 工作进程数量(可设置为cpu数量)
worker_processes  2;

# 错误日志
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# pid 文件
pid        logs/nginx.pid;


# 事件区块
events {
    # 单个进程最大连接数(整体最大连接数=worker_connections*worker_processes)
    worker_connections  1024;
}


# http 块,用于配置 http 服务相关参数,如:文件类型映射、日志记录、gzip压缩 等
http {
    #include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
    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;

    # 开启高效文件传输模式。推荐设置为 on
    sendfile        on;

    # 连接超时时间,单位为秒
    keepalive_timeout  65;

	  # 开启 gizp
    gzip  on;
	  # 关闭错误页中的版本提示
	  server_tokens off;

		# allow 白名单,deny 黑名单
		# 设置白名单
		allow 123.13.123.12;
     allow 23.53.32.1/100;
     # 拒绝其他所有访问
     deny  all;

	 # upstream 配负载均衡
    # 测试环境
    upstream test_server{
       	server 192.168.1.1:8180;

			# 健康检查设置
        server 192.168.1.1:8180 max_fails=3 fail_timeout=30s;
    }
	
	# 开发环境
    upstream dev_server{
		server 192.168.1.2:8180;

		# 健康检查设置
        server 192.168.1.2:8180 max_fails=3 fail_timeout=30s;
    }

    server {
	    # server 监听端口
        listen       80;
		# 提供服务的域名主机名
        server_name  localhost;
		# 设置字符集(整个 server 下生效)
        charset utf-8;

		# 当前 server 的访问日志
        # access_log  logs/access_80.log;

        location / {
            root   html;
            index  index.html index.htm;
        }

		location ^~ /test/ {
			proxy_pass http://test_server/test/;
			proxy_set_header host $host;
			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 $scheme;
		}
		
		location ^~ /admin-test/ {
			proxy_pass http://192.168.1.1:8090/admin-test/;
			proxy_set_header host $host;
			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 $scheme;
		}
		
		location ^~ /dev/ {
			proxy_pass http://dev_server/dev/;
			proxy_set_header host $host;
			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 $scheme;
		}
		
		location ^~ /admin-dev/ {
			proxy_pass http://192.168.1.2:8090/admin-dev/;
			proxy_set_header host $host;
			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 $scheme;
		}

        #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;
        }
    }

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com