我有一个Artifactory服务器作为gem存储库。为了使用本地服务器,我需要用这个丑陋的网址设置我的宝石源。
gem source -a gems.example.com/api/gems/gems/
我想消除开发人员知道 URI /api/gems/gems/
的需要,以便他们可以简单地访问gems.example.com
server {
listen *:443 ssl default;
server_name artifactory.example.com gems.example.com;
ssl on;
ssl_certificate /etc/ssl/certs/artifactory.example.com.crt.pem;
ssl_certificate_key /etc/ssl/private/artifactory.example.com.key.pem;
location / {
if ( $request_uri ~ ^/(.*)$ ) { proxy_pass http://localhost:8081/artifactory/$1; }
proxy_cookie_path ~*^/.* /;
proxy_pass http://localhost:8081/artifactory/;
proxy_pass_header Server;
proxy_read_timeout 2400s;
}
重写是可行的,但是nginx配置已经有以下if
,并且nginx不允许多个条件。
无效:
if ( $request_uri ~ ^/(.*)$ && $server_name) { proxy_pass http://localhost:8081/artifactory/$1; }
如何消除网址https://gems.example.com/api/gems/gems/
中的/api/gems/gems/
?
使用多个服务器块,如下所示:
请注意,第二个服务器块具有以下更改。
- server_name
- 收听线路
上没有"默认"- proxy_pass http://localhost:8081/artifactory/api/gems/gems/
etc/nginx/sites-enabled/artifactory.conf
server {
listen *:443 ssl default;
server_name artifactory.example.com;
ssl on;
ssl_certificate /etc/ssl/certs/artifactory.example.com.crt.pem;
ssl_certificate_key /etc/ssl/private/artifactory.example.com.key.pem;
location / {
if ( $request_uri ~ ^/(.*)$ ) { proxy_pass http://localhost:8081/artifactory/$1; }
proxy_cookie_path ~*^/.* /;
proxy_pass http://localhost:8081/artifactory/;
proxy_pass_header Server;
proxy_read_timeout 2400s;
}
# ....
/etc/nginx/sites-enabled/artifactory-gems.conf
server {
listen *:443 ssl;
server_name gems.example.com;
ssl on;
ssl_certificate /etc/ssl/certs/artifactory.example.com.crt.pem;
ssl_certificate_key /etc/ssl/private/artifactory.example.com.key.pem;
location / {
if ( $request_uri ~ ^/(.*)$ ) { proxy_pass http://localhost:8081/artifactory/api/gems/gems/$1; }
proxy_cookie_path ~*^/.* /;
proxy_pass http://localhost:8081/artifactory/api/gems/gems/;
proxy_pass_header Server;
proxy_read_timeout 2400s;
}
# ....
注意/gems/gems
对应于工件上名为"宝石"的虚拟存储库。如果您有多个 Gem 存储库,则需要为每个存储库添加一个虚拟主机。