<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Proxy on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/proxy/</link>
    <description>Recent content in Proxy on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Sat, 30 May 2026 16:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/proxy/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mystery: Where Did That http_proxy Come From in My New Tmux Session?</title>
      <link>https://blog.margrop.net/en/post/tmux-zsh-http-proxy-mystery/</link>
      <pubDate>Sat, 30 May 2026 16:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/tmux-zsh-http-proxy-mystery/</guid>
      <description>&lt;h1 id=&#34;preface&#34;&gt;Preface&lt;/h1&gt;&#xA;&lt;p&gt;Today I ran into a truly bizarre problem: in a freshly created tmux session, &lt;code&gt;echo $http_proxy&lt;/code&gt; showed a valid proxy address. But I distinctly remember that my &lt;code&gt;.zshrc&lt;/code&gt; only defines two aliases — &lt;code&gt;proxy_on&lt;/code&gt; and &lt;code&gt;proxy_off&lt;/code&gt; — both of which require manual invocation and don&amp;rsquo;t run automatically.&lt;/p&gt;&#xA;&lt;p&gt;The weirdest part: my main shell shows &lt;code&gt;http_proxy&lt;/code&gt; as empty, but as soon as I enter tmux, it&amp;rsquo;s there. I spent nearly an hour tracking this down, so I&amp;rsquo;m documenting it for posterity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python App in macOS LaunchAgent Can&#39;t Reach the Internet? Here&#39;s the httpx Proxy Trap You Need to Know</title>
      <link>https://blog.margrop.net/en/post/macos-launchagent-python-httpx-proxy-no-route-to-host/</link>
      <pubDate>Sat, 30 May 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/macos-launchagent-python-httpx-proxy-no-route-to-host/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;When a Python application using httpx with &lt;code&gt;trust_env=True&lt;/code&gt; runs inside a macOS LaunchAgent, it silently picks up the system proxy settings from &lt;code&gt;scutil --proxy&lt;/code&gt;. But the LaunchAgent process may not be able to reach that proxy server at all — resulting in &lt;code&gt;All connection attempts failed&lt;/code&gt; or &lt;code&gt;No route to host&lt;/code&gt; errors.&lt;/p&gt;&#xA;&lt;p&gt;The fix is one line: add &lt;code&gt;NO_PROXY=*&lt;/code&gt; to the LaunchAgent&amp;rsquo;s plist &lt;code&gt;EnvironmentVariables&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This article documents the full debugging journey: from discovering that my AI Agent&amp;rsquo;s WeChat Enterprise (WeCom) messages weren&amp;rsquo;t being replied to, through methodical proxy troubleshooting, to finally pinning down the root cause — macOS system proxy + LaunchAgent network isolation. We&amp;rsquo;ll dive deep into Python httpx source code, macOS proxy architecture, and the many gotchas of LaunchAgent runtime environments.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Using Old Methods! Deploying the Latest Docker CE on Ubuntu 26.04 LTS with Ultra-fast Mirror Setup</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</link>
      <pubDate>Tue, 26 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Foreword&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the official release of Ubuntu 26.04 LTS (Resolute Raccoon), developers and system administrators worldwide are upgrading their development, testing, and production environments to this long-term support version. However, setting up Docker—the cornerstone of modern containerization and microservices architecture—on a brand-new LTS release can sometimes present unexpected friction.&lt;/p&gt;&#xA;&lt;p&gt;If you are still relying on legacy commands like &lt;code&gt;apt-get install docker.io&lt;/code&gt;, or copy-pasting outdated tutorials meant for Ubuntu 20.04 or 22.04, you are likely to run into issues. These issues range from outdated software packages to APT repository format mismatches (especially with the widespread adoption of the new DEB822 format), or network timeouts when pulling images from container registries in restricted environments.&lt;/p&gt;&#xA;&lt;p&gt;This article provides a comprehensive, step-by-step, and highly detailed guide to installing Docker Community Edition (Docker CE) on Ubuntu 26.04 LTS. We will delve into modern DEB822 repository configurations, non-root system privilege separation, systemd service tweaks, and advanced network acceleration (both HTTP/HTTPS proxies and private registry mirrors).&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Adding Proxy Support to Antigravity and Claude on macOS: Safely Wrapping Electron Apps Without Patching Them</title>
      <link>https://blog.margrop.net/en/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</link>
      <pubDate>Wed, 25 Mar 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before You Start&lt;/strong&gt;&#xA;This post documents a pattern that has already been validated in a real macOS environment: &lt;strong&gt;do not patch the original application bundle, and do not publish your real proxy endpoint. Instead, place a tiny wrapper app in front of the original Electron application.&lt;/strong&gt; That wrapper becomes the stable place where proxy settings, launch flags, and Node-side bootstrap logic live.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;When people first hit this problem, the instinct is usually to edit &lt;code&gt;/Applications/Claude.app&lt;/code&gt; or &lt;code&gt;/Applications/Antigravity.app&lt;/code&gt; directly. That can work once, but it is a poor long-term operational choice for three reasons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;You may break code signing behavior and make future launches or permission prompts more fragile.&lt;/li&gt;&#xA;&lt;li&gt;Auto-updates can overwrite your local modifications at any time.&lt;/li&gt;&#xA;&lt;li&gt;If you hardcode a real proxy endpoint into the app bundle, screenshots, scripts, or a public post, you can leak private infrastructure details that never needed to be exposed.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The approach that proved much more stable was:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Leave the original &lt;code&gt;Claude.app&lt;/code&gt; and &lt;code&gt;Antigravity.app&lt;/code&gt; untouched.&lt;/li&gt;&#xA;&lt;li&gt;Create &lt;code&gt;Claude (Proxy).app&lt;/code&gt; and &lt;code&gt;Antigravity (Proxy).app&lt;/code&gt; under &lt;code&gt;~/Applications&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Let each wrapper app do only three things: load a private &lt;code&gt;proxy.env&lt;/code&gt;, export upper/lower-case proxy variables, and launch the original Electron binary with &lt;code&gt;--proxy-server&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;If the target app also uses Node/undici &lt;code&gt;fetch&lt;/code&gt;, inject a very small &lt;code&gt;NODE_OPTIONS=--require=...&lt;/code&gt; bootstrap so Node-side requests follow the same proxy path.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;All proxy endpoints in this article are intentionally redacted and replaced with placeholders such as:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http://127.0.0.1:PORT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace that value with your own local proxy entrypoint. &lt;strong&gt;Do not publish real proxy hosts, internal IP addresses, usernames, passwords, tokens, or internal domains in a public article, repository, or screenshot.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use LXC containers to build V2Ray and Caddy services on Alpine Linux to provide IPv6-based SSL WebSocket proxy</title>
      <link>https://blog.margrop.net/en/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</link>
      <pubDate>Wed, 03 Jul 2024 15:32:41 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</guid>
      <description>Preface In the modern Internet environment, proxy services are becoming more and more important, especially when it is necessary to break through geographical restrictions and improve privacy protection. This article will introduce in detail how to use V2Ray and Caddy to build an SSL WebSocket proxy service provided through IPv6 and domain name on the LXC container of the Alpine Linux 3.19 operating system.&#xA;Environment preparation Make sure your LXC container is running and has an IPv6 address assigned.</description>
    </item>
    <item>
      <title>Bypassing the Firewall or Setting Up a Server Farm: V2Ray Configuration with WebSocket &#43; TLS &#43; Web &#43; CDN</title>
      <link>https://blog.margrop.net/en/post/fuckgfw-v2ray-websocket-tls-web-cdn/</link>
      <pubDate>Tue, 26 Jan 2021 13:44:36 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/fuckgfw-v2ray-websocket-tls-web-cdn/</guid>
      <description>&lt;p&gt;&lt;code&gt;v2ray&lt;/code&gt; The most secure configuration currently is &lt;code&gt;WebSocket + TLS + Web + CDN&lt;/code&gt;. It uses port &lt;code&gt;443&lt;/code&gt;: direct access shows a website, but after connecting with a client it becomes a proxy tool. From the outside it looks like an electric shaver, but it is actually a hair dryer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxy Only for GitHub git clone</title>
      <link>https://blog.margrop.net/en/post/github-git-clone-speed-up/</link>
      <pubDate>Sun, 17 Jan 2021 12:53:12 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/github-git-clone-speed-up/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.https://github.com.proxy socks5://127.0.0.1:1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.https://github.com.proxy socks5://127.0.0.1:1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
